Java开发笔记(⼗四)⼏种运算符的优先级顺序
到⽬前为⽌,我们已经学习了Java语⾔的好⼏种运算符,包括算术运算符、赋值运算符、逻辑运算符、关系运算符等基础运算符,并且在书写赋值语句时都没添加圆括号,显然是默认了先完成算术、逻辑、关系等运算,最后才进⾏赋值操作。也就是说,在这四类运算符当中,赋值运算符的优先级最低,那么其他三种运算符的优先级顺序⼜是如何排列的呢?
⾸先来看算术运算符,Java中的算术运算符主要包括正号负号、加减乘除,以及取余数符号。对于数学上的四则运算来说,⼤家早已熟知乘法和除法的优先级⾼于加法和减法,它们在Java编程中的优先级顺序也是如此,因为取余数运算依赖于除法操作,所以取余数运算跟乘除运算的优先级是⼀样的。另外还有正号和负号运算,其实主要是负号运算的优先级,数学上约定俗成负数可以直接参与四则运算,这意味着负号作为数字前⾯的减号,它的优先级⽐四则运算要⾼。于是算术运算符内部各符号的优先级顺序依次为:+正号、-负号 > 乘号*、除号/、取余数符号% > 加号+、减号-,下⾯是演⽰算术运算符优先级的代码例⼦:
// ⽐较加减乘除以及取余数运算的优先级顺序
int fiveArithmetic = 7+5-4*6/3%9; // 等价于“7+5-(4*6/3%9)”
System.out.println("fiveArithmetic="+fiveArithmetic);
// ⽐较负号与乘除运算的优先级顺序
int negativeArithmetic = -8/4+2*-3; // 等价于“(-8)/4+2*(-3)”
System.out.println("negativeArithmetic="+negativeArithmetic);
再来看关系运算符,关系符号包括等号、不等号、⼤于号、⼩于号等等,它们互相之间的优先级是⼀样的。把关系运算符跟算术运算符作⽐较,按惯例应当是⼤于⼩于号不如加减乘除优先,Java代码⾥的关系运算优先级也确实低于算术运算。也就是说,某个式⼦要等到加减乘除计算完毕,接下来才会进⾏⼤于、等于和⼩于的关系⽐较。下⾯是⽐较算术运算符和关系运算符优先级的代码⽰例:
// 以下⽐较算术运算符和关系运算符的优先级顺序
boolean greaterResult = 1+2>3+4; // 等价于“(1+2)>(3+4)”
System.out.println("greaterResult="+greaterResult);
运算符优先级图片boolean lessResult = 1+2<3+4; // 等价于“(1+2)<(3+4)”
System.out.println("lessResult="+lessResult);
接着看逻辑运算符,由于逻辑运算的与或⾮操作只对布尔变量进⾏,因此它跟操作数值变量的算术运算没有可⽐性,布尔类型与数值类型可是井⽔不犯河⽔,完全是风马⽜不相及。故⽽逻辑运算只能与关系运算⼀较⾼下,因为关系运算的计算结果是布尔类型,同时逻辑运算的操作元素也为布尔类型,所以光凭感觉就可认为关系运算先于逻辑运算进⾏。这个推理的确适⽤于“与”、“或”、“异或”这三种逻辑运算,但并不适⽤于“⾮”运算,缘由在于“⾮”运算只有⼀个操作数。凡是只有⼀个操作数的运算符都归类为⼀元操作符,⽽⼀元操作符的优先级要⾼于⼆元操作符,是故负号运算⽐乘除运算优先,同理“⾮”运算也⽐⼤于等于⼩于要优先。但凡某变量前⾯出现了感叹
号“!”,那么⼀定会先对该变量进⾏⾮运算,除⾮有个圆括号把感叹号后⾯的式⼦给圈起来。
于是逻辑运算最终的优先级顺序为:逻辑⾮运算! > 关系运算符(含等号、不等号) > 其它逻辑运算符(含与符号&、或符号|、异或符号^)。下⾯是⽐较逻辑运算和关系运算的优先级代码:
// ⽐较逻辑与运算以及关系运算符的优先级顺序
boolean andResult = 1>2&3<4; // 等价于“(1>2)&(3<4)”
System.out.println("andResult="+andResult);
// ⽐较逻辑或运算以及关系运算符的优先级顺序
boolean orResult = 1>2|3<4; // 等价于“(1>2)|(3<4)”
System.out.println("orResult="+orResult);
// ⽐较逻辑异或运算以及关系运算符的优先级顺序
boolean xorResult = 1>2^3<4; // 等价于“(1>2)^(3<4)”
System.out.println("xorResult="+xorResult);
// ⽐较逻辑⾮运算以及关系运算符的优先级顺序
boolean zhen = true;
boolean jia = false;
boolean notResult = zhen==!jia; // 等价于“zhen==(!jia)”
System.out.println("notResult="+notResult);
总结⼀下,倘若没有圆括号加以约束,那么对于数值变量来说,⼏种运算符的优先级顺序依次为:正
号、负号 > 乘号、除号、取余号 > 加号、减号 > ⼤于号、等号、⼩于号、不等号 > 各种赋值符号;对于布尔变量来说,相关运算符的优先级顺序依次为:逻辑⾮ > 等号、不等号 > 逻辑与、或、异或 > 各种赋值符号。
更多Java技术⽂章参见《》

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。