运算符丰富是 Java 语言的主要特点之一,它提供的运算符数量之多,在高级语言中是少见的。那么当多个运算符出现在一个表达式中,谁先谁后呢?
这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
这套视频讲的都是Java基础,简单易懂,大家可以参考下(PS:运算符优先级在第48节)
Java300集零基础适合初学者视频
下表中具有最高优先级的运算符在最上面,最低优先级的在最下面。
类别 | 操作符 | 关联性 |
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr-- | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = + = - = * = / =%= >> = << =&= ^ = | = | 从右到左 |
逗号 | , | 左到右 |
使用优先级为的小括号(),可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使用小括号将该运算符和操作符括起来
(x-y)*z/2
在这个表达式中先进行括号内的减法运算,再将结果与 z 相乘,最后将积除以 2 得出结果。整个表达式的顺序按照从左向右执行,比较容易理解。
再来看一个复杂的表达式,如下所示。
--y || ++x && ++z;
这个表达式中包含了算术运算符和逻辑运算符。根据上表中列出的优先级,可以确定它的执行顺序如下:
- 先计算 y 的自减运算符,即 --y
- 再计算 x 的自增运算符,即 ++x
- 接着计算 z 的自增运算符,即 ++z
- 由于逻辑与比逻辑或的优先级高,这里将2和3 的结果进行逻辑与运算,即 ++x && ++z
- 最后将4的结果与1进行逻辑或运算,即 1 || 4。
如果没有上述对该表达式执行顺序的说明,第一眼看到它时将很难识别优先级。对于这类问题,可以通过添加小括号使表达的顺序更加清晰,而不用去查优先级表。如下所示为改进后的表达式。
(--y)||((++x)&&(++z));
技巧:记住这么多运算符的优先级确实比较困难,所以大家在日常使用中尽量使用小括号来组织!
运算符优先级大概就是这样了,大家理解了吗?如果觉得文字枯燥难懂的朋友可以看视频学习理解,更容易掌握!!
今天主要就给大家分享这些了,有其他意见和想法的朋友可以留言讨论哦,我们一起学习,一起进步!