Java语⾔运算符优先级
所有的数学运算都认为是从左向右运算的,Java 语⾔中⼤部分运算符也是从左向右结合的,只有单⽬运算符、赋值运算符和三⽬运算符例外,其中,单⽬运算符、赋值运算符和三⽬运算符是从右向左结合的,也就是从右向左运算。
乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置⽽不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。
⼀般⽽⾔,单⽬运算符优先级较⾼,赋值运算符优先级较低。算术运算符优先级较⾼,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单⽬运算符、三⽬运算符、赋值运算符具有右结合性。
Java 语⾔中运算符的优先级共分为 14 级,其中 1 级最⾼,14 级最低。在同⼀个表达式中运算符优先级⾼的先执⾏。表 1 列出了所有的运算符的优先级以及结合性。
表1 运算符的优先级
使⽤优先级为 1 的⼩括号可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使⽤⼩括号将该运算符和操作符括起来。例如下⾯的表达式:
在这个表达式中先进⾏括号内的减法运算,再将结果与 z 相乘,最后将积除以 5 得出结果。整个表达式的顺序按照从左向右执⾏,⽐较容易理解。
再来看⼀个复杂的表达式,如下所⽰。
这个表达式中包含了算术运算符和逻辑运算符。根据表 1 中列出的优先级,可以确定它的执⾏顺序如下:
运算符优先级图片1.先计算 y 的⾃减运算符,即 --y。
2.再计算 x 的⾃增运算符,即 ++x。
3.接着计算 z 的⾃增运算符,即 ++z。
4.由于逻辑与⽐逻辑或的优先级⾼,这⾥将2和3的结果进⾏逻辑与运算,即 ++x && ++z。
5.最后将4的结果与1进⾏逻辑或运算,即 --y||++x&&++z。
如果没有上述对该表达式执⾏顺序的说明,第⼀眼看到它时将很难识别优先级。对于这类问题,可以通过添加⼩括号使表达的顺序更加清晰,⽽不⽤去查优先级表。如下所⽰为改进后的表达式。
技巧:记住这么多运算符的优先级是⽐较困难的,因此读者应该在实际应⽤中多多练习。
因为 Java 运算符存在这种优先级的关系,因此在做 SCJP 的时候或者某些公司的⾯试题,有如下 Java 代码:
问 c 的值是多少?这样的语句实在太恐怖了,即使多年的⽼程序员看到这样的语句也会眩晕。这样的代码只能在考试中出现,作为⼀个程序员如果写这样的代码,恐怕他马上就得⾛⼈了,因为他完全不懂程序开发。
源代码就是⼀份⽂档,源代码的可读性⽐代码运⾏效率更重要。因此在这⾥要提醒⼤家:
不要把⼀个表达式写得过于复杂,如果⼀个表达式过于复杂,则把它分成⼏步来完成。
不要过多地依赖运算符的优先级来控制表达式的执⾏顺序,这样可读性太差,尽量使⽤()来控制表达式的执⾏顺序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论