一尘不染

Java中的+ = a ++ * a ++ * a ++。如何评估?

javascript

我在该网站上遇到了这个问题,并在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),这是事实。我想我缺少有关此运算符优先级的信息。


阅读 265

收藏
2020-09-21

共1个答案

一尘不染

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(参考):

后缀增量表达式的值是存储新值之前的变量值。

2020-09-21