Java 混淆:为什么 c 的值是 8 而不是 9?

Java confusion: Why is the value of c 8 instead of 9?

提问人:user21950782 提问时间:5/24/2023 最后编辑:user207421user21950782 更新时间:5/24/2023 访问量:126

问:

我对为什么在下面的代码中 c = 8 而不是 9 感到困惑。

int a = 5, b = 3;
System.out.println(a + b);
int c = a + b++; //
b++;
System.out.println(a + b);
System.out.format("a=%d, b=%d, c=%d %n", a,b,c);
    
    
爪哇岛

评论

0赞 user207421 5/24/2023
因为是后增量,而不是前增量。b++
1赞 Karl Knechtel 5/24/2023
这回答了你的问题吗?Java 中的 preincrement / postincrement

答:

2赞 davidalayachew 5/24/2023 #1

当你说 时,你不是在说“将 1 加到 ,然后使用 'new value'。你说的是'使用'的当前值来表达这个表达式,然后一旦你完成,将1加到'。b++bbbb

因此,在您的示例中,当前表达式为 。因此,对于 ,将给出表达式 ,然后将自身递增为 。int c = a + b++a + ba + bb34

如果你想避免这个问题,你可以这样做,而不是 . 将完全按照您的期望执行操作:increment ,然后在表达式中使用其新值。++bb++++bb

6赞 WJS 5/24/2023 #2

递增或递减意味着先读取值,然后修改。预递增或递减表示修改值,然后读取。(b++)(b--)(++b)(--b)

0赞 Tarun Choudhary 5/24/2023 #3

增量运算符有两种类型:

  1. Post increment : (b++),表示它将首先使用该值,然后再递增。
  2. Pre Increment :(++b),表示它将首先递增该值,然后使用它。

因此,在您使用的情况下,它首先使用 b 的值,即 3,然后更新 3 -> 4,然后再次使用 ,再次将值更新为 4 -> 5。因此,它的新值是 5,在 c 中它使用了未更新的先前值。b++b++

1赞 Reilas 5/24/2023 #4

的分配发生在语句之后。b

int c = a + b++;

这和说是一样的

int c = a + b;
b = b + 1;

如果要相等,可以使用前缀一元运算符。c9

int c = a + ++b;

这和说是一样的

b = b + 1;
int c = a + b;

赋值、算术和一元运算符(™学习 Java 语言> Java 教程>语言基础知识)

评论

0赞 Peter Mulm 5/24/2023
这是一个很好的解释!
2赞 Holger 6/5/2023
“声明之后”充其量是误导性的。儗。。。int c = a + b++ + b++;
0赞 Reilas 6/6/2023
@Holger,我不确定我是否理解,你能提供答案吗?
2赞 Holger 6/6/2023
当您尝试类似操作时,您会注意到第二个将计算为第一个 .换句话说,不会在“语句之后”更新,因为表达式的其他部分可以看到已经更新的值。您应该考虑一个类似于调用 a 的表达式,该表达式将立即更改列表但返回旧值。int c = a + b++ + b++;bb++bb++set(index, value)List