Java 中的括号和一元运算符优先级

问题描述 投票:0回答:2

根据运算符的优先顺序,

()
在一元运算符(如
++
--
)之前计算。但让我们考虑以下代码:-

int x = 1;
x = 2 + (x++);

如果先执行

x++
x
的值应该更新为2,因此x的值应该是
4
。然而,在执行代码时,
x
的值为
3
。这是否意味着表达式的计算没有考虑
()
周围的
x++
,还是我遗漏了一些东西?

java operators expression unary-operator
2个回答
1
投票

让我尝试解释一下。

如果将 (x++) 括起来。它仍然被评估,但它的值在增量(++)操作之前使用。

代码的顺序如下:

    首先评估
  1. (x++)。此时 x 仍然是 1 并且 (x++) 返回 x 的原始值 (1) 然后将 x 增加到 2。

  2. 括号中的 x++ 求值后,表达式变为 x = 2 + 1,如下:

    后自增运算符 x++ 返回 x 的当前值,然后递增 x。 因此,在表达式 x++ 中返回 x 的当前值,(即 1),然后将 x 增加到 2。

    因此,在此步骤结束时,表达式 x = 2 + 1 为 3。

  3. 最后将加法 (3) 的结果赋给 x。所以 x 现在是 3。

为了让代码返回 4,您应该使用“++x”(预自增运算符) 该运算符首先递增 x,然后返回 x 的更新值。如果在表达式中使用 ++x,则 x 在使用其值之前会递增。

希望我解释得很好。 :D


0
投票

“...根据运算符的优先级顺序,

()
在诸如
++
--
等一元运算符之前计算。...”

表达式将从 leftright 进行计算。
Java® 语言规范 – 第 15 章。表达式

“...这是否意味着表达式的计算没有考虑

()
周围的
x++
,还是我遗漏了一些东西?”

括号并不表示何时计算一元运算符

我建议查看以下 Java 教程。
运算符(Java™ 教程 > 学习 Java 语言 > 语言基础知识)

© www.soinside.com 2019 - 2024. All rights reserved.