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页面中所述)是的,一旦发现错误

我想知道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页面中所述)

是的,一旦发现错误条件,操作符将使计算短路,&&在发现正确条件时也会短路

&&和| |运算符对两个布尔表达式执行条件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;

}

这对你来说很容易测试你自己。。。