java - 为什么输出是 "false10"而不是 "false11"?

标签 java

有人能告诉我为什么下面的代码中 a 的值没有改变吗?

int a = 10;
System.out.print( (a < 5) && (++a==11));
System.out.println(a);

最佳答案

您正在看到“短路评估”的实际效果。 boolean 表达式的第二部分(++a==11)从未被评估,因为 (a < 5)是假的。在这种情况下,JVM 在计算 (++a==11) 之前就知道整个表达式为 false。 ,所以它完全跳过它。

这也是为什么这种“副作用”在逻辑测试中很糟糕的一个很好的例子:你正在以不可预测的方式改变你正在评估的值。在一个不平凡的程序中,您不一定知道 (a < 5) 是否是真的,所以很难知道是否a是否会增加。

关于java - 为什么输出是 "false10"而不是 "false11"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422780/

相关文章:

java - 如何使用 JCA 读取 BouncyCaSTLe 私钥 PEM 文件?

java - 如何使用java知道web容器的路径?

java - 使用cmd命令运行类文件

java - 为什么 Java 必须采用类型删除来保持向后兼容性?

java - 一个类有没有可能实现两个接口(interface),每个接口(interface)都包含一个具有相同方法头的方法?

java - 添加从文本文件读取的 double

java - SQL 服务器异常 : The result set is closed

java - 使用 DataBufferInt 更改 bufferedImage 中的亮度

java - 如果新的应用程序版本可用,如何触发更新(来自 GITHUB)

java - 如何确定正在呈现哪些 JSP 页面?