在此代码中:
int y = 10; int z = (++y * (y++ + 5));
我所期望的
y++ + 5由于最里面的括号的优先级,将执行First 。因此,值y将为11,此表达式的值将为15。然后++y * ()将被执行。所以12 * 15 =180。所以z = 180
y++ + 5
y
++y * ()
我得到了什么
z = 176
这意味着VM从左到右不遵循操作员优先级。那么我对运算符优先级的理解是错误的吗?
表达式( 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