在这段代码中:
int y = 10;
int z = (++y * (y++ + 5));
我的预期
第一个 y++ + 5
将被执行,因为最内层括号的优先级。所以 y
的值为 11,这个表达式的值为 15。然后 ++y * ()
将被执行。所以 12 * 15 = 180。所以 z=180
我得到了什么
z=176
这意味着虚拟机从左到右不遵循运算符优先级。那么我对运算符优先级的理解是错误的吗?
最佳答案
表达式 (++y * (y++ + 5));将被放置在类似这样的堆栈中:
1. [++y]
2. [operation: *]
3. [y++ + 5] // grouped because of the parenthesis
它会按照这个顺序执行,结果是
1. 10+1 = [11] // y incremented
2. [operation: *]
3. 11+5 = [16] // y will only increment after this operation
表达式被计算为
11 * 16 = 176
关于java - 为什么这里没有遵循运算符优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29162301/