Java 如何处理单个 IF 语句中的多个条件

新手上路,请多包涵

可以说我有这个:

 if(bool1 && bool2 && bool3) {
...
}

现在。如果 bool1 被评估为 false,Java 是否足够聪明以跳过检查 bool2 和 bool3? java甚至从左到右检查它们吗?我问这个是因为我正在按执行它们所需的时间对 if 语句中的条件进行“排序”(从左边最便宜的条件开始)。现在我不确定这是否会给我任何性能优势,因为我不知道 Java 如何处理这个问题。

原文由 Paul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
2 个回答

是的,Java(类似于其他主流语言)使用_惰性求值_短路,这意味着它求值尽可能少。

这意味着以下代码是完全安全的:

 if(p != null && p.getAge() > 10)

此外, a || b 从不评估 b 如果 a 评估为 true

原文由 Tomasz Nurkiewicz 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果 bool1 被评估为 false,Java 是否足够聪明以跳过检查 bool2 和 bool2?

这不是聪明的问题,这是语言中规定的要求。否则你不能写这样的表达式。

 if(s != null && s.length() > 0)

或者

if(s == null || s.length() == 0)

顺便说一句,如果您使用 &| 它总是会计算表达式的两边。

原文由 Peter Lawrey 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题