java - Java 运算符 && 与 || 的求值顺序
问题描述
我有这个简单的代码块
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 程序员 I 认证指南中,twist 2.4,一个类似的例子给出了所有逻辑操作数都将被评估的答案。&&
首先评估并且||
是最后一个。
但是结果给了我一个假设,即优先级仅用于对操作数和运算符进行分组。从 thisa++ == 10 || b++ == 20 && c++ < 30
到 this计算表达式时,它被左侧 a++ == 10 || (b++ == 20 && c++ < 30)
的值短路。所以右边的表达式(运算符)不会被计算。因为如果先对算子求值,and的值会增加,但不会。true
||
&&
&&
b
c
我对么?请帮忙。
解决方案
没有括号的评估顺序是从左到右。由于第一次评估是正确的并且因为操作符是 || 其余的没有执行。(如果你的第一个结果是假的,然后你有一个 && 操作符,也会发生同样的情况)。
++ 运算符总是在比较执行之后执行。(在 C++ 中有两个不同的运算符 ++c 和 c++,然后您可以选择何时进行加法)
好的想法!!!
推荐阅读
- nlp - 数据集语言识别
- deno - 在 deno 框架中等待没有异步
- vue.js - 我在尝试使用 apexcharts 显示图形时遇到了这个问题?
- spring-mvc - Spring MVC 不返回网页
- pandas - 在 for 循环中附加数据框中的行
- vba - VBA Powerpoint - 在形状中找到 HIGHLIGHTED 文本,然后添加一个具有动画效果的新文本框
- swift - tvos:更改 TVCaptionButtonView 的焦点颜色
- google-colaboratory - 在 colab 错误中读取 csv
- xslt - xslt 1.0 儒略日计算的参考/引用
- python - 终端说,“成功安装了 openpyxl 6.2.2”,但我无法在 IDLE 中导入它;为什么?(蟒蛇,初学者)