Java中的按位异或是什么?

时间:2012-09-06 12:01:14

标签: java scjp

假设:

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 个答案:

答案 0 :(得分:11)

首先,如果你得到true ^ true = false 第二,如果你得到false ^ false = false 因为^ - 是OR exclusive opeartor,这意味着

true ^ true = false  
true ^ false = true 
false ^ true = true 
false ^ false = false

答案 1 :(得分:9)

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

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

答案 2 :(得分: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.

答案 3 :(得分:1)

它不会打印任何内容,因为当XOR运算符与布尔参数(而不是整数)一起使用时,如果两个操作数中只有一个是true,则只会返回true

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

在您的第二个if中,两个部分都评估为falsefalse ^ false == false