可以说我有这样的:如何JAVA处理内单个多个条件IF语句
if(bool1 && bool2 && bool3) {
...
}
现在。如果bool1被评估为false,Java是否足够聪明以跳过检查bool2和bool2? java甚至从左到右检查它们吗? 我在问这个问题,因为我正在“分类”我的if内部的条件,直到它们完成所需的时间(从左边最便宜的那个开始)。现在我不确定这是否会给我带来任何性能好处,因为我不知道Java如何处理这个问题。
可以说我有这样的:如何JAVA处理内单个多个条件IF语句
if(bool1 && bool2 && bool3) {
...
}
现在。如果bool1被评估为false,Java是否足够聪明以跳过检查bool2和bool2? java甚至从左到右检查它们吗? 我在问这个问题,因为我正在“分类”我的if内部的条件,直到它们完成所需的时间(从左边最便宜的那个开始)。现在我不确定这是否会给我带来任何性能好处,因为我不知道Java如何处理这个问题。
是,爪哇(类似于其他主流语言)使用
懒评价
短路,这意味着它少计算越好。
这意味着下面的代码是完全安全的:
if(p != null && p.getAge() > 10)
此外,a || b
从不计算b
如果a
计算结果为true
。
抱歉挖掘旧线程,但为什么你有“&&和”?你的意思是“&&”? – 2014-08-26 17:40:14
是的,这就是所谓的短路。
请看看这个维基百科页面上short-circuiting
如果bool1被评估为false,Java是否足够智能地跳过检查bool2和bool2?
它不是一个聪明的事情,它是一个在语言中指定的要求。否则,你不能写表达式。
if(s != null && s.length() > 0)
或
if(s == null || s.length() == 0)
顺便说一句,如果你使用&
和|
它将始终计算表达式的两侧。
请look up在Java中(同样适用于|
和||
)&
和&&
之间的差异。
&
和|
是只是逻辑运算符,而&&
和||
是条件逻辑运算符,它在你的例子意味着
if(bool1 && bool2 && bool3) {
将跳过bool2
和bool3
如果bool1
是假的,
if(bool1 & bool2 & bool3) {
将评估所有条件,而不考虑其值。
例如,给定:
boolean foo() {
System.out.println("foo");
return true;
}
if(foo() | foo())
将打印foo
两次,并if(foo() || foo())
- 只是一次。
由于您试图通过这些更改来提高性能,您是否尝试过在移动条件之前和之后测量性能?一方面,它应该告诉你,这个逻辑是否真的被短路,如下所述,另一方面,它会告诉你这些变化的幅度是否在更大的情况下是显着的。 – Douglas 2011-12-20 09:31:16