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,将跳过bool2
和bool3
,并且
if(bool1 & bool2 & bool3) {
将评估所有条件,无论其价值如何。
例如,给定:
boolean foo() { System.out.println("foo"); return true; }
if(foo() | foo())
将打印foo
两次 , if(foo() || foo())
– 只打印一次 。
是的,这称为短路。
请查看这个维基百科页面上的短路