根据运算符的优先顺序,
()
在一元运算符(如 ++
或 --
)之前计算。但让我们考虑以下代码:-
int x = 1;
x = 2 + (x++);
如果先执行
x++
,x
的值应该更新为2,因此x的值应该是4
。然而,在执行代码时,x
的值为3
。这是否意味着表达式的计算没有考虑 ()
周围的 x++
,还是我遗漏了一些东西?
让我尝试解释一下。
如果将 (x++) 括起来。它仍然被评估,但它的值在增量(++)操作之前使用。
代码的顺序如下:
(x++)。此时 x 仍然是 1 并且 (x++) 返回 x 的原始值 (1) 然后将 x 增加到 2。
括号中的 x++ 求值后,表达式变为 x = 2 + 1,如下:
后自增运算符 x++ 返回 x 的当前值,然后递增 x。 因此,在表达式 x++ 中返回 x 的当前值,(即 1),然后将 x 增加到 2。
因此,在此步骤结束时,表达式 x = 2 + 1 为 3。
最后将加法 (3) 的结果赋给 x。所以 x 现在是 3。
为了让代码返回 4,您应该使用“++x”(预自增运算符) 该运算符首先递增 x,然后返回 x 的更新值。如果在表达式中使用 ++x,则 x 在使用其值之前会递增。
希望我解释得很好。 :D
“...根据运算符的优先级顺序,
在诸如()
或++
等一元运算符之前计算。...”--
表达式将从 left 到 right 进行计算。
Java® 语言规范 – 第 15 章。表达式
“...这是否意味着表达式的计算没有考虑
周围的()
,还是我遗漏了一些东西?”x++
括号并不表示何时计算一元运算符。
我建议查看以下 Java 教程。
运算符(Java™ 教程 > 学习 Java 语言 > 语言基础知识)