&&,&为什么输出不同?
这是代码段
你能解释为什么产出会变化吗?
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