java – 为什么在\u0026\u0026,&,||的情况下输出会有所不同?

前端之家收集整理的这篇文章主要介绍了java – 为什么在\u0026\u0026,&,||的情况下输出会有所不同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是代码

你能解释一下输出变化的原因吗?

1)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t && ((i++) == 0));
        b = (f && ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出为1

2)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t & ((i++) == 0));
        b = (f & ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出是3

3)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t || ((i++) == 0));
        b = (f || ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出是2

4)

public static ShortCkt {
    public static void main(String args[]) {
        int i = 0;
        boolean t = true;
        boolean f = false,b;
        b = (t | ((i++) == 0));
        b = (f | ((i+=2) > 0));
        System.out.println(i);      
    }
}

这种情况下的输出是3

解决方法

Why is the output different in case of &&,&,|| ?

就像在C/C++&&被评估为“懒惰”而&不是.

如果a是假的那么&& b甚至不评估b就会返回false.

同样适用于|| b:如果第一个操作数a为真,则整个表达式为真,第二个操作数b从不进行求值.对于|但是,a和b都将被评估.

如果在使用&&和/或(或||)有副作用,如您的示例中所示.

旁注:很少有java程序员知道^(xor)也适用于布尔值. (A ^^版本不存在仅仅因为它是多余的.)

猜你在找的Java相关文章