2
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 规范?

4

3 回答 3

6

此处不会发生短路评估,因为您使用的是按位与运算 ( &) 而不是逻辑与运算 ( &&)。

于 2012-06-03T14:06:31.060 回答
1

double&用于短路操作。采用

status = status && fun();
于 2012-06-03T14:06:30.050 回答
1

&&保证操作员短路。运营商保证不会
&

于 2012-06-03T14:06:41.277 回答