这是代码段
你能解释一下为什么输出不同
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
为什么 &&、&、|| 的输出不同?
就像 C/C++ 中一样&&
被“懒惰地”评估,而&
is not.
If a
那么是假的a && b
将返回 false 甚至不评估b
.
同样适用于a || b
:如果第一个操作数,a
为真,整个表达式为真,第二个操作数,b
从未被评估。为了a | b
然而,两者a
and b
将被评估。
如果使用时未评估操作数,则会产生后果&&
(or ||
)有副作用,如您的示例所示。
旁注:很少有 Java 程序员知道这一点^
(xor) 也适用于布尔值。 (A^^
版本不存在只是因为它是多余的。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)