java - a += a++ * a++ * a++ 在 Java 中。它是如何被评估的?

标签 java operator-precedence post-increment

我遇到了这个问题 in this website ,并在 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) 结果是正确的。我想我遗漏了有关此运算符优先级的一些信息。

最佳答案

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(reference):

The value of the postfix increment expression is the value of the variable before the new value is stored.

关于java - a += a++ * a++ * a++ 在 Java 中。它是如何被评估的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369393/

相关文章:

java - TestNG:从 eclipse 运行 xml 时重试有效,从命令行运行 xml 时无效

java - 优化字符串操作代码

不使用 "."(点)与使用 "."(点)的 Scala 函数调用

javascript - 自增运算符返回 NaN

c - 预增量和后增量

java - 持久的 JSON 内容

javascript - 在 Javascript 为什么 -'54' +30 的结果是 -24(在 javascript 中类型强制)

lua - 混合逻辑和关系运算符的评估顺序?

c - 如果 a 的值为 5,a++ + a 的值是多少?

java - Eclipse 文件夹上的圆形取消符号是什么意思?