关于 Java 8 (OCA) 中短路运算符和 post-fix 递增的问题
Question concerning short-cirquit operators and post-fix incrementation in Java 8 (OCA)
我正在学习我的 OCA 认证并找到这段代码并且想知道为什么下面代码的结果是“1, 2”而不是“1, 3”。
这里使用的'&'运算符不是short cirquit,后缀增量应用于第一个int,为什么不应用于第二个呢?
int i = 0;
int j = 1;
if( (i++ == 0) & (j++ == 2) ){
i = 12;
}
System.out.println(i+" "+j);
edit 学习期间休息很重要。我理解所涉及的概念,但疲劳让我犯了一个逻辑错误,这让我假设 j 开始时是 2
为什么 j
在 if
块 j++ == 2
中仅递增一次时 3
。最初 j
初始化为 1
,然后应用 ++
运算符将其递增为 2
。
++
运算符本质上是在执行 j = j + 1
,并且由于您使用了逻辑 AND 运算符 &
,因此对第一个条件和第二个条件都进行了评估。
注意:如果第一个条件被评估为 false,第二个条件将被评估为 &
是逻辑 AND 运算符而不是短路的条件 &&
运算符。
javase specs 中描述的逻辑运算符。
正如@Marvin 在评论中指出的那样,j++ = j + 1 = 1 + 1 = 2。
在学习 OCA 认证时定期休息很重要 :)
我正在学习我的 OCA 认证并找到这段代码并且想知道为什么下面代码的结果是“1, 2”而不是“1, 3”。
这里使用的'&'运算符不是short cirquit,后缀增量应用于第一个int,为什么不应用于第二个呢?
int i = 0;
int j = 1;
if( (i++ == 0) & (j++ == 2) ){
i = 12;
}
System.out.println(i+" "+j);
edit 学习期间休息很重要。我理解所涉及的概念,但疲劳让我犯了一个逻辑错误,这让我假设 j 开始时是 2
为什么 j
在 if
块 j++ == 2
中仅递增一次时 3
。最初 j
初始化为 1
,然后应用 ++
运算符将其递增为 2
。
++
运算符本质上是在执行 j = j + 1
,并且由于您使用了逻辑 AND 运算符 &
,因此对第一个条件和第二个条件都进行了评估。
注意:如果第一个条件被评估为 false,第二个条件将被评估为 &
是逻辑 AND 运算符而不是短路的条件 &&
运算符。
javase specs 中描述的逻辑运算符。
正如@Marvin 在评论中指出的那样,j++ = j + 1 = 1 + 1 = 2。
在学习 OCA 认证时定期休息很重要 :)