为什么&=操作符与&&不一样

我只是好奇java是如何工作的。 有人可以解释为什么在案例1中调用getBoolean而在案例2中不调用?

public class Main {

    public static void main(String[] args) {
        System.out.println("---------- Case 1 ----------");
        boolean b = false;
        b &= getBoolean(true);

        System.out.println("---------- Case 2 ----------");
        b = false;
        b = b && getBoolean(true);
    }

    private static boolean getBoolean(boolean bool) {
        System.out.println("getBoolean(" + bool + ") was calledn");
        return bool;
    }

}

输出:

---------- Case 1 ----------
getBoolean(true) was called

---------- Case 2 ----------

b &= ab = b & a的快捷方式,而不是b = b && a

这是因为&&&运营商的区别。

  • &运算符总是评估条件的两边。

  • &&操作符仅在需要时评估第二个。

  • 所以, getBoolean(true)将不会在getBoolean(true)情况下运行。


    在情况2中getBoolean(true); 不会被评估,因为&&是一个短路操作符,例如,如果表达式为false则停止评估

    情况1只是将getBoolean()方法的结果设置为b变量。


    更新,感谢@KisHan:

    请注意, b &= a等于b = b & a而不是b = b && a


    在第二种情况下bfalse&&如果第一个条件是假的也不会前进。

     b = b && getBoolean(true);//b is false
    

    因此&& (逻辑与)首先检查操作的左侧,如果它是true continues到右侧。

    & (按位与)运算符评估表达式的两边,因为它是按位AND运算符。它在左侧和右侧之间执行AND操作。

    所以在第一种情况下会是

    b = b & getBoolean(true);//will perform AND operation to evaluate Expression
    
    链接地址: http://www.djcxy.com/p/73917.html

    上一篇: Why &= operator doesn't work the same as &&

    下一篇: java equivalent of Delphi NOT