Java运算符优先级

所有的数学运算都认为是从左向右运算的,Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。

  乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。

  一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。

  Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。

  使用优先级为 1 的小括号可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使用小括号将该运算符和操作符括起来。例如下面的表达式:

  (x-y)*z/5

  在这个表达式中先进行括号内的减法运算,再将结果与 z 相乘,最后将积除以 5 得出结果。整个表达式的顺序按照从左向右执行,比较容易理解。

  再来看一个复杂的表达式,如下所示。

  --y || ++x && ++z;

  这个表达式中包含了算术运算符和逻辑运算符。根据表 1 中列出的优先级,可以确定它的执行顺序如下:

  ① 先计算 y 的自减运算符,即 --y。

  ② 再计算 x 的自增运算符,即 ++x。

  ③ 接着计算 z 的自增运算符,即 ++z。

  ④ 由于逻辑与比逻辑或的优先级高,这里将 ② 和 ③ 的结果进行逻辑与运算,即 ++x && ++z。

  ⑤ 最后将 ④ 的结果与 ① 进行逻辑或运算,即 --y||++x&&++z。

  如果没有上述对该表达式执行顺序的说明,第 一眼看到它时将很难识别优先级。对于这类问题,可以通过添加小括号使表达的顺序更加清晰,而不用去查优先级表。如下所示为改进后的表达式。

  (--y)||((++x)&&(++z));

  技巧:记住这么多运算符的优先级是比较困难的,因此读者应该在实际应用中多多练习。

  因为 Java 运算符存在这种优先级的关系,因此在做 SCJP 的时候或者某些公司的面试题,有如下 Java 代码:

int a = 5;

  int b = 4;

  int c = a++- --b*++a/b-- >>2%a--;

  问 c 的值是多少?这样的语句实在太恐怖了,即使多年的老程序员看到这样的语句也会眩晕。这样的代码只能在考试中出现,作为一个程序员如果写这样的代码,恐怕他马上就得走人了,因为他完全不懂程序开发。

  源代码就是一份文档,源代码的可读性比代码运行效率更重要。 因此在这里要提醒大家:

  不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。

  不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序。

课程推荐:

尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1qL411u7eE

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 运算符丰富是 Java 语言的主要特点之一,它提供的运算符数量之多,在高级语言中是少见的。那么当多个运算符出现在一...
    程序媛小白阅读 618评论 0 1
  • 我们先后学习了不同的运算符,通过运算符我们的能进行各种不同的操作实现自己的想要的效果,但是此时还存在一个问题,当在...
    老九君阅读 353评论 0 0
  • 问题如下代码运行结果是啥? 运算符优先级 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级...
    测试老杨阅读 1,498评论 0 1
  • Java运算符优先级 当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符...
    阿博聊编程阅读 237评论 0 0
  • 运算符的优先级决定了表达式中运算执行的先后顺序。通常优先级由高到底的顺序依次是:1.增量和减量运算。2.算术运算。...
    谨慎取名大表哥阅读 2,891评论 0 0

友情链接更多精彩内容