我在该网站上遇到了这个问题,并在Eclipse中进行了尝试,但无法理解如何对其进行精确评估。
int x = 3, y = 7, z = 4; x += x++ * x++ * x++; // gives x = 63 System.out.println(x); y = y * y++; System.out.println(y); // gives y = 49 z = z++ + z; System.out.println(z); // gives z = 9
根据网站上的评论,x + = x ++ * x ++ * x ++解析为x = x +((x + 2)*(x + 1)* x),这是事实。我想我缺少有关此运算符优先级的信息。
x + = x ++ * x ++ * x ++
x = x +((x + 2)*(x + 1)* x)
Java根据表达式的优先级从左到右计算表达式。
int x = 3, y = 7, z = 4; x (3) += x++ (3) * x++ (4) * x++ (5); // gives x = 63 System.out.println(x); y = y (7) * y++ (7); System.out.println(y); // gives y = 49 z = z++ (4) + z (5); System.out.println(z); // gives z = 9
后缀递增运算符仅在使用/返回变量后递增该变量。一切似乎都是正确的。
这是后缀增量运算符的伪代码:
int x = 5; int temp = x; x += 1; return temp;
从JLS 15.14.2(参考):
后缀增量表达式的值是存储新值之前的变量值。