假设:
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");
}
}
}
为什么此示例代码不输出任何内容?
答案 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
部分评估为true
和true ^ true == false
在您的第二个if
中,两个部分都评估为false
和false ^ false == false