根据http://introcs.cs.princeton.edu/java/11precedence/ http://introcs.cs.princeton.edu/java/11precedence/,后自增运算符的优先级高于加法运算符。
因此,对于以下代码:
int i = 1;
int j = i + i++;
System.out.println(j);
我本以为分配给 j 的表达式将按如下方式求值(每一行都是求值中的一个“步骤”):
i + i++
i + (1) // do post-increment operator; returns 1, and makes i = 2
(2) + (1) // do addition operator. need to get the operand i, so do that.
3
但当我尝试这个程序时,j 的值为 2。
所以我很困惑。在表达式中,它是否在触及 i++ 之前将表达式中的所有“i”替换为 i 的当前值?
编辑:这里的人们使用的短语“评估顺序”帮助我找到了以下可能有用的 stackoverflow 答案:Java中求值顺序的规则是什么? https://stackoverflow.com/questions/6800590/what-are-the-rules-for-evaluation-order-in-java .
编辑:我对下面的答案做出了最好的猜测。我还是欢迎指正。
根据Java 语言规范,15.7.1 https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html
二元运算符的左侧操作数似乎在右侧操作数的任何部分被求值之前被完全求值。
因此i
加法运算符左侧的值之前已计算i++
在右侧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)