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

让我说我有这个:

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

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

是的,Java(类似于其他主流语言)使用惰性评估短路,这意味着它尽可能少地进行评估。

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

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

还有, a || b a || b如果计算结果为true则永远不会计算b

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

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

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

要么

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

如果您使用&| BTW 它总是会评估表达式的两面。

请在Java中查找 &&&之间的区别(同样适用于||| )。

&| 只是逻辑运算符,而&&||条件逻辑运算符,在您的示例中表示

 if(bool1 && bool2 && bool3) { 

如果bool1为false,将跳过bool2bool3 ,并且

 if(bool1 & bool2 & bool3) { 

将评估所有条件,无论其价值如何。

例如,给定:

 boolean foo() { System.out.println("foo"); return true; } 

if(foo() | foo())将打印foo 两次if(foo() || foo()) – 只打印一次

是的,这称为短路。

请查看这个维基百科页面上的短路