6

鉴于:

public class Spock {
    public static void main(String[] args) {
        Long tail = 2000L;
        Long distance = 1999L;
        Long story = 1000L;
        if ((tail > distance) ^ ((story * 2) == tail)) {
            System.out.print("1");
        }
        if ((distance + 1 != tail) ^ ((story * 2) == distance)) {
            System.out.print("2");
        }
    }
}

为什么此示例代码不输出任何内容?

4

4 回答 4

11

第一个如果你得到true ^ true = false
第二个如果你得到因为false ^ false = false
-^OR exclusive运营商,这是手段

true ^ true = false  
true ^ false = true 
false ^ true = true 
false ^ false = false
于 2012-09-06T12:05:54.360 回答
9

您正在使用布尔异或,这与!=. 在第一种情况下,两个条件都为真,而在第二种情况下,两个条件都为假,因此两个分支都不被采用。(您可以使用 IDE 中的调试器进行检查)

唯一真正的区别是!=优先级&高于^

于 2012-09-06T12:05:40.690 回答
4

来自http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.22.2

For ^, the result value is true if the operand values are different; otherwise, the result is false.

于 2012-09-06T12:07:28.980 回答
1

它不会打印任何内容,因为当 XOR 运算符与布尔参数(而不是整数)一起使用时,仅true当 2 个操作数之一是时才会返回true

在您的第一部分中,if两个部分都评估为truetrue ^ true == false

在你的第二个if部分评估为falsefalse ^ false == false

于 2012-09-06T12:07:55.247 回答