JAVA 中相同变量的一元递增运算符的奇怪表达式求值顺序

strange expression evaluation order with unary increment operators for same variable in JAVA

int i = 1;
System.out.println(i++ + ++i);

为什么这 4 个给出如下:

  1. Java 中的表达式从左到右求值(在优先级之后)
  2. Post 增量 (i++) 具有更高的优先级。 所以它应该是 1 + 2.

我建议删除版主的问题,因为答案很简单(根据 Joachim 的评论)post 增量运算符上下文中的表达式求值包括表达式中的任何表达式,而不仅仅是top 主要语句之一(在本例中为 sysout)。给定 i++ 本身就是一个语句,它将变量递增 1,它已经在子表达式 (i++) 中执行,但 returns i 到父表达式。那只是我不知道的。

从左到右计算:

  1. i++ 被评估。
    • i 加 1,所以现在是 2
    • 这个表达式的值为1,因为i的初始值被返回
  2. ++i被评价
    • i 加 1,所以现在是 3
    • 这个表达式的值为3,因为返回自增后的值
  3. i++ + ++i中的加法求值
    • i++ 被评估为 1
    • ++i 被评估为 3
    • 1+3 是 4