JAVA 中相同变量的一元递增运算符的奇怪表达式求值顺序
strange expression evaluation order with unary increment operators for same variable in JAVA
int i = 1;
System.out.println(i++ + ++i);
为什么这 4 个给出如下:
- Java 中的表达式从左到右求值(在优先级之后)
- Post 增量 (i++) 具有更高的优先级。
所以它应该是 1 + 2.
我建议删除版主的问题,因为答案很简单(根据 Joachim 的评论)post 增量运算符上下文中的表达式求值包括表达式中的任何表达式,而不仅仅是top 主要语句之一(在本例中为 sysout)。给定 i++ 本身就是一个语句,它将变量递增 1,它已经在子表达式 (i++) 中执行,但 returns i 到父表达式。那只是我不知道的。
从左到右计算:
i++
被评估。
i
加 1,所以现在是 2
- 这个表达式的值为
1
,因为i
的初始值被返回
++i
被评价
i
加 1,所以现在是 3
- 这个表达式的值为
3
,因为返回自增后的值
- 对
i++ + ++i
中的加法求值
i++
被评估为 1
++i
被评估为 3
- 1+3 是
4
int i = 1;
System.out.println(i++ + ++i);
为什么这 4 个给出如下:
- Java 中的表达式从左到右求值(在优先级之后)
- Post 增量 (i++) 具有更高的优先级。 所以它应该是 1 + 2.
我建议删除版主的问题,因为答案很简单(根据 Joachim 的评论)post 增量运算符上下文中的表达式求值包括表达式中的任何表达式,而不仅仅是top 主要语句之一(在本例中为 sysout)。给定 i++ 本身就是一个语句,它将变量递增 1,它已经在子表达式 (i++) 中执行,但 returns i 到父表达式。那只是我不知道的。
从左到右计算:
i++
被评估。i
加 1,所以现在是2
- 这个表达式的值为
1
,因为i
的初始值被返回
++i
被评价i
加 1,所以现在是3
- 这个表达式的值为
3
,因为返回自增后的值
- 对
i++ + ++i
中的加法求值i++
被评估为 1++i
被评估为 3- 1+3 是
4