运行以下程序时:
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t || ((i++) == 0));
b = (f || ((i+=2) > 0));
System.out.println(i);
答案是2.为什么?
答案 0 :(得分:4)
在Java中的OR语句中,首先评估左侧,如果它看起来是真的,则认为该语句的右侧不重要,因此Java不会检查该方。
所以在你的情况下,语句右侧的i ++没有被调用,因为t是真的。
答案 1 :(得分:2)
由于conditional-or operator ||
是短路的(强调我的),所以有什么好处:
条件或运算符
||
运算符类似于|
(第15.22.2节),但仅在其左侧操作数的值为{时才计算其右侧操作数{1}} 强>
false
在此行中,b = (t || ((i++) == 0));
为t
,因此不评估右侧操作数,结果为true
。完成此步骤后,true
仍为0。
i
但是,在这种情况下,b = (f || ((i+=2) > 0));
为f
,因此评估右手操作数 。此操作数除其他外,评估false
所以i+=2
,在评估结束时0为2。
答案 2 :(得分:0)
让我们一步一步来做。
b = (t || ((i++) == 0));
t计算结果为true,你有运算符||,这意味着JVM不会执行第二部分 - true || false == true和true || true == true,表示第二部分无关紧要
b = (f || ((i+=2) > 0));
现在f评估为false。这次VM不知道表达式的答案,因为它取决于第二个,因此它评估(i + = 2)> 0;因此我变成2
答案 3 :(得分:0)
非常简单
1. int i = 0;
2. boolean t = true;
3. boolean f = false, b;
4. b = (t || ((i++) == 0));
5. b = (f || ((i+=2) > 0));
6. System.out.println(i);
第1行。我是0
第2行.t是真的
第3行.f为假,b为布尔
第4行。因为t为真,所以||
不会评估(i++==0)
的部分,即使它是假的
第5行.f为false所以这里评估(i+=2)>0
bcoz ||
评估util得到至少一个真
第6行。由于第5行,我是2
注意:如果|用来代替||所以评估所有部件 ||匹配第一个true,为所有人返回true |匹配所有部分,但至少需要一个真正的