Piy*_*agi 3 java operator-precedence post-increment
以下代码的输出是什么:
int x = 2;
x += x++ * x++ * x++;
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)
我知道这++variableName是预增量运算符,并且值variableName在表达式中使用之前递增,而在执行表达式variableName++之后递增其值.我想知道的是 - 这个逻辑在这里如何应用?
小智 8
使用x = 1而不是2更容易看到正在发生的事情.输出为x=17.
理解这一点的关键在于JLS 15.7.2,它规定在执行任何操作部分之前,每个操作数都要完全评估.
Java编程语言保证在执行操作本身的任何部分之前,操作符的每个操作数(条件运算符&&,||和?:)除外似乎都要完全评估.
因此,评估x ++(每次3次,从左到右,具有适当的优先级,这里不是问题),然后评估操作*并将其分配给原始值.
x = 1 + (1 * 2 * 3)
Run Code Online (Sandbox Code Playgroud)
如果x以2开头,则得到:
x = 2 + (2 * 3 * 4)
Run Code Online (Sandbox Code Playgroud)
与C不同,它在Java中定义良好,并且在任何运行时的每次调用中都表现相同.
如果有人想为自己运行它,则需要关联:https://ideone.com/Y2qcJ6
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |