【发布时间】:2021-08-23 20:56:43
【问题描述】:
我有这个简单的代码块
int a = 10;
int b = 20;
int c = 30;
boolean result = a++ == 10 || b++ == 20 && c++ < 30;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(result);
当我运行它时,控制台是
11
20
30
true
这个结果告诉我只有 a++ == 10 被评估。
正如我从https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html 中读到的,
运算符&& 的优先级高于||,应首先评估。在这本书 OCA Java SE 8 Programmer I Certification Guide 中,twist 2.4,一个类似的例子给出了所有逻辑操作数都将被评估的答案。 && 首先评估,|| 是最后评估。
但结果给了我一个假设,即优先级仅用于对操作数和运算符进行分组。
从这个a++ == 10 || b++ == 20 && c++ < 30 到这个 a++ == 10 || (b++ == 20 && c++ < 30) 计算表达式时,它被|| 左侧的值true 短路。所以右边的表达式(&& 运算符)不会被计算。
因为如果先计算运算符&&,则b和c的值会增加而不会增加。
我说的对吗?请帮忙。
【问题讨论】: