关于 Java 8(OCA)中的短路运算符和后缀增量的问题 [关闭]
Posted
技术标签:
【中文标题】关于 Java 8(OCA)中的短路运算符和后缀增量的问题 [关闭]【英文标题】:Question concerning short-cirquit operators and post-fix incrementation in Java 8 (OCA) [closed] 【发布时间】:2019-12-16 12:42:25 【问题描述】:我正在学习我的 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++ = j + 1 = 1 + 1 = 2
。为什么j
应该是 3?
因为我学习太久了,看来我的大脑已经被挖掘出来了..但是谢谢你的帮助hha..
如果您使用 &&
而不是 &
,这将完全一样。
【参考方案1】:
为什么j
在if
块j++ == 2
中只增加一次时会是3
。最初j
初始化为1
,然后应用++
运算符将其递增为2
。
++
运算符本质上是在执行 j = j + 1
,并且由于您使用了逻辑 AND 运算符 &
,因此对第一个条件和第二个条件都进行了评估。
注意:如果第一个条件仍被评估为 false,则第二个条件将被评估为 &
是逻辑 AND 运算符,而不是条件 &&
运算符,它是短路的。
javase specs 中描述的逻辑运算符。
【讨论】:
我会接受你的回答,因为你费尽心思把它全部写出来。谢谢!这里使用的概念对我来说很清楚,但我今天可能已经用了太久了。 @matthewkeissard,您可以检查我在答案中发布的 java 规范中按位逻辑运算符的行为。 这不是按位和运算符。这是逻辑和运算符。 @AndyTurner 我的错,bitwise 当操作数是 numeric 和 logical 当操作数是 boolean,我说的对吗? @AmardeepBhowmick 你是大致正确的。您在答案中链接的语言规范部分更准确地描述了它。【参考方案2】:正如@Marvin 在 cmets 中指出的那样,j++ = j + 1 = 1 + 1 = 2。
在学习 OCA 认证时,定期休息很重要 :)
【讨论】:
以上是关于关于 Java 8(OCA)中的短路运算符和后缀增量的问题 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章