&&,&为什么输出不同?
这是代码段
你能解释为什么产出会变化吗?
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 ++ &&中评估的“懒惰”而&不是。
如果a是假的,那么a && b将返回false而不评估b 。
a || b同样适用a || b a || b :如果第一个操作数a为真,则整个表达式为真,并且第二个操作数b永远不会被评估。 对于a | b a | b然而, a和b都会被评估。
如果在使用&& (或|| )时未评估的操作数具有副作用,则会产生后果,如示例中所示。
附注:很少有java程序员知道^ (xor)也适用于布尔值。 (A ^^版本不存在只是因为它是多余的。)
有4个boolean二进制运算符我们在这里关注:
&&是条件操作符 &是逻辑和操作符 || 是条件操作符或操作符 | 是逻辑还是操作符 关键是:
true ,“和”的结果才是true false ,则无论右操作数如何,结果都为false true只有当至少一个操作数是true true ,则无论右操作数如何,结果都为true 换句话说,假设没有例外等:
&和| 总是评估两个操作数 &&和|| 有条件地评估正确的操作数; 只有在其值可能影响二进制操作的结果时才评估右操作数。 这意味着在下列情况下不会评估右操作数: &&的左操作数评估为false false ) ||的左操作数 评估为true true ) 参考
& , ^和| & ,结果值是true如果两个操作数的值是true ; 否则,结果是false 。 | 时,结果值是false如果两个操作数的值是false ; 否则,结果是true 。 && &&运算符与&相似,但只有在其左侧操作数的值为true才会评估其右侧操作数。 || || 运算符就像| ,但只有在其左侧操作数的值为false时才评估其右侧操作数。 也可以看看
& , ^和| 相关问题
|什么区别? 和|| 在Java中? &=和|=短路吗? (没有!) |= )运算符 &&=或||= ? &&和|| 是逻辑AND和OR运算符,它们总是导致boolean表达式。 &和| 是按位AND和OR操作符,它们对每一边进行按位比较。 有关这些运营商的更多信息,请参阅此链接
上一篇: Why is the output different in case of &&, &,
下一篇: Do &= and
