Java优化
我想知道java是否优化了这段代码? 是否使用短路()评估Java优化,java,optimization,short-circuiting,Java,Optimization,Short Circuiting,我想知道java是否优化了这段代码? 是否使用短路()评估 boolean c5 = A || B boolean c4 = C && D boolean c3 = E || F boolean c2 = G && H if ((c5) && (c4) && (c3) && (c2)){ //execute operation } 对 (&&和|短路,如您链接的Wikipedia页面中所述)是的,一旦发现错误
boolean c5 = A || B
boolean c4 = C && D
boolean c3 = E || F
boolean c2 = G && H
if ((c5) && (c4) && (c3) && (c2)){
//execute operation
}
对
(
&&
和|
短路,如您链接的Wikipedia页面中所述)是的,一旦发现错误条件,操作符将使计算短路,&&在发现正确条件时也会短路
&&和| |运算符对两个布尔表达式执行条件and和条件OR运算。这些运算符表现出“短路”行为,这意味着只有在需要时才计算第二个操作数
如果要强制程序计算所有条件,则必须使用位逻辑运算符:&和|
例如:
if ((c5) & (c4) & (c3) & (c2)){
//execute operation
}
前面的代码将评估所有条件,即使发现错误(非短路)。是。它确实使用短路评估(由
&&
和|
运算符表示)。你的情况
(c5) && (c4) && (c3) && (c2)
本质上与
(A || B) && (C && D) && (E || F) && (G && H)
这和
(A || B) && C && D && (E || F) && G && H
所以
- 如果
将被评估为A
,则将不测试true
李>B
- 如果
和A
将为B
,则整个表达式将等于false
它总是false && C && D && (E || F) && G && H
(因为false
总是false&&which
),所以false
不会被计算C&&D&&(E | | F)&&G&&H
以此类推……确实如此,您可以通过运行如下代码自己检查它:
boolean foo = true || func();
boolean bar = false && func();
public boolean func() {
System.out.println("short circuit"); //not gonna see that line
return true;
}
这对你来说很容易测试你自己。。。