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

Parentheses and Unary Operator Precedence in Java

提问人:Chinmay Krishna 提问时间:10/14/2023 更新时间:10/14/2023 访问量:50

问:

根据运算符的优先顺序,在一元运算符(如 或)之前进行计算。但是,让我们考虑以下代码:-()++--

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

如果首先执行,则 的值应更新为 2,因此 x 的值应为 。但是,在执行代码时,的值为 。这是否意味着在没有考虑周围的情况下评估了表达式,还是我遗漏了什么?x++x4x3()x++

java 表达式 一元运算符

评论

0赞 Rifat Rubayatul Islam 10/14/2023
X++ 是后增量操作。x++ expression 的值为 x。然后 x 递增。因此,您的代码变为 x = 2 + 1 = 3。
0赞 VGR 10/14/2023
自 Java 语言规范:“后缀增量表达式的值是存储新值之前变量的值。(强调来自规范,不是我添加的)

答:

1赞 rufo123 10/14/2023 #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赞 Reilas 10/14/2023 #2

"...根据运算符的优先级顺序,() 在一元运算符(如 ++ 或 --之前计算。..."

表达式将按从左的顺序计算。
Java® 语言规范 – 第 15 章。表达 式

"...这是否意味着表达式的计算没有考虑 x++ 周围的 (),或者我遗漏了什么?

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

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