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技术文章参见《Java开发笔记(序)章节目录

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的运算符有多种,不同的运算符具有不同的优先级。如果不了解运算符优先级,程序中的运算结果可能会出现错误。下面是C语言运算符优先级顺序表: 1. 括号 () 括号用于改变优先级顺序,最高优先级。 2. 单目运算符 +、-、!、~、++、-- 单目运算符作用于一元操作数,并且优先级较高。 3. 乘除模运算符 *、/、% 乘、除、模运算符具有相同的优先级,高于加、减运算符。 4. 加减运算符 +、- 低于乘、除、模运算符,但高于比较运算符。 5. 移位运算符<<、>> 比较位运算符优先级高,低于乘、除、模、加、减运算符。 6. 关系运算符 <、<=、>、>= 关系运算符优先级低于逻辑运算符。 7. 相等运算符 ==、!= 相等运算符优先级低于关系运算符。 8. 按位与运算符 & 按位与运算符优先级低于相等运算符。 9. 按位异或运算符 ^ 按位异或运算符优先级低于按位与运算符。 10. 按位或运算符 | 按位或运算符优先级低于按位异或运算符。 11. 逻辑与运算符 && 逻辑与运算符优先级低于按位或运算符。 12. 逻辑或运算符 || 逻辑或运算符优先级低于逻辑与运算符。 13. 条件运算符 ? : 条件运算符是C语言中唯一的三元运算符优先级低于逻辑或运算符。 14. 赋值运算符 =、+=、-=、/=、%=、&=、^=、|=、<<=、>>= 赋值运算符优先级最低。 通过掌握C语言运算符优先级顺序表,我们可以正确理解和使用不同的运算符,从而避免程序中的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值