【问题标题】:Question concerning short-cirquit operators and post-fix incrementation in Java 8 (OCA) [closed]关于 Java 8(OCA)中的短路运算符和后缀增量的问题 [关闭]
【发布时间】: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..
  • 如果您使用 && 而不是 &,这将完全一样。

标签: java logical-operators short-circuiting


【解决方案1】:

为什么jifj++ == 2 中只增加一次时会是3。最初j 初始化为1,然后应用++ 运算符将其递增为2

++ 运算符本质上是在执行 j = j + 1,并且由于您使用了逻辑 AND 运算符 &,因此对第一个条件和第二个条件都进行了评估。

注意:如果第一个条件仍被评估为 false,则第二个条件将被评估为 & 是逻辑 AND 运算符,而不是条件 && 运算符,它是短路的。

javase specs 中描述的逻辑运算符。

【讨论】:

  • 我会接受你的回答,因为你费尽心思把它全部写出来。谢谢!这里使用的概念对我来说很清楚,但我今天可能已经用了太久了。
  • @matthewkeissard,您可以检查我在答案中发布的 java 规范中按位逻辑运算符的行为。
  • 这不是按位和运算符。这是逻辑和运算符。
  • @AndyTurner 我的错,bitwise 当操作数是 numericlogical 当操作数是 boolean,我说的对吗?
  • @AmardeepBhowmick 你是大致正确的。您在答案中链接的语言规范部分更准确地描述了它。
【解决方案2】:

正如@Marvin 在 cmets 中指出的那样,j++ = j + 1 = 1 + 1 = 2。

在学习 OCA 认证时,定期休息很重要 :)

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 2020-11-04
    • 1970-01-01
    • 2020-08-17
    • 2015-05-21
    • 2018-09-13
    • 2011-01-08
    • 1970-01-01
    • 2011-04-17
    相关资源
    最近更新 更多