日期:2014-05-20  浏览次数:20620 次

SCJP考题一道:按位异或 运算符 与boolean值
Given:
3. public class Spock {
4. public static void main(String[] args) {
5. Long tail = 2000L;
6. Long distance = 1999L;
7. Long story = 1000L;
8. if((tail > distance) ^ ((story * 2) == tail))
9. System.out.print("1");
10. if((distance + 1 != tail) ^ ((story * 2) == distance))
11. System.out.print("2");
12. }
13. }

What is the result?
A. 1
B. 2
C. 12
D. Compilation fails.
E. No output is produced.
F. An exception is thrown at runtime.

如果单独输出:System.out.println((tail>distance)^((story*2)==distance));结果是true。
为何在第9行中不输出1呢?
请高手多指教。这点很迷惑的,不是很懂。非常感谢。

------解决方案--------------------
tail > distance这得到的是布尔量,和C不同,JAVA这个就是一个false或true的值,不能像C那样转成1,0那样进行运算,所以第一个if怎样都是false的。不能进行运算为什么还能得到false而不报错,我就不知道了。
------解决方案--------------------
直接忽略1F

true ^ true 等价于 1 ^ 1,两边相同,得到0,false
------解决方案--------------------
^是异或运算符,只有当两端一个为true一个为false,这个表示式true ^ false或者false ^ true才会为true,其他情况为false。