在下列情况下是否可能发生短路评估

时间:2012-06-03 14:04:49

标签: java

public class JavaApplication11 {

    static boolean fun() {
        System.out.println("fun");
        return true;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        boolean status = false;
        status = status & fun();
        status = fun() & status;
    }
}

Java会想,因为status已经是假的,它不会执行fun方法吗?我测试过,在这两种情况下,都会执行fun。但是,它是否可以保证跨Java规范?

3 个答案:

答案 0 :(得分:6)

此处不会发生短路评估,因为您使用按位和操作(&)而不是逻辑和操作({{1} })。

答案 1 :(得分:1)

double &用于短路操作。使用

status = status && fun();

答案 2 :(得分:1)

&&运营商保证短路 保证&运算符不会。