提问人:user21950782 提问时间:5/24/2023 最后编辑:user207421user21950782 更新时间:5/24/2023 访问量:126
Java 混淆:为什么 c 的值是 8 而不是 9?
Java confusion: Why is the value of c 8 instead of 9?
问:
我对为什么在下面的代码中 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);
答:
2赞
davidalayachew
5/24/2023
#1
当你说 时,你不是在说“将 1 加到 ,然后使用 'new value'。你说的是'使用'的当前值来表达这个表达式,然后一旦你完成,将1加到'。b++
b
b
b
b
因此,在您的示例中,当前表达式为 。因此,对于 ,将给出表达式 ,然后将自身递增为 。int c = a + b++
a + b
a + b
b
3
4
如果你想避免这个问题,你可以这样做,而不是 . 将完全按照您的期望执行操作:increment ,然后在表达式中使用其新值。++b
b++
++b
b
6赞
WJS
5/24/2023
#2
递增或递减意味着先读取值,然后修改。预递增或递减表示修改值,然后读取。(b++)
(b--)
(++b)
(--b)
0赞
Tarun Choudhary
5/24/2023
#3
增量运算符有两种类型:
- Post increment : (b++),表示它将首先使用该值,然后再递增。
- 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;
如果要相等,可以使用前缀一元运算符。c
9
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++;
b
b++
b
b++
set(index, value)
List
评论
b++