Java初学者测试中的简单代码说明

时间:2016-01-03 16:53:25

标签: java

运行以下程序时:

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 个答案:

答案 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 |匹配所有部分,但至少需要一个真正的