【问题标题】:How are y=x++ and y=x-- different when the assignment operators has the least priority?当赋值运算符的优先级最低时,y=x++ 和 y=x-- 有何不同?
【发布时间】:2021-08-28 23:09:55
【问题描述】:

我是 Java 新手。 刚刚发现在表达式中, y=x++,y 假定 x 的值,x 变为 +1。 如果我听起来很愚蠢,请原谅我,但根据order of precedence,赋值运算符在最后。所以不是 x++ 应该先发生,然后是赋值。提前致谢。

【问题讨论】:

  • 我感觉你在 y = x++; 之间感到困惑。和 y = ++x;
  • 是的,但++-- 有点特别,see here。这就是为什么我建议只使用 ++-- 作为独立表达式。
  • 关于优先级更正但Documentation: "... 后缀增量表达式的值是变量之前存储新值之前的值。,,, " (分配的值不是变量的值(这意味着更高的赋值优先级),而是后增量 表达式 的结果,根据定义,变量值 before 递增)
  • 这与优先级无关。 postincrement/postdecrement 运算符在取值后更新操作数,仅此而已。

标签: java operator-precedence


【解决方案1】:

y=x++ 将 x 的值分配给 y,然后 x 递增。 x++ 操作称为后增量。

您可以运行以下代码进行说明:

int x = 0;
System.out.println("Illustration of post-increment");
System.out.println(x);
System.out.println(x++);
System.out.println(x);

int y = 0;
System.out.println("Illustration of pre-increment");
System.out.println(y);
System.out.println(++y);
System.out.println(y);

【讨论】:

    【解决方案2】:

    问:那么x++ 不应该先发生,然后再分配。

    答:是的。这就是发生的事情。语句y = x++; 等价于:

    temp = x;      // | This is 'x++'
    x = x + 1;     // | (note that 'temp' contains the value of 'x++')
    
    y = temp;      // This is the assignment.
    

    但正如您所见,操作的顺序(++=)并不影响操作的实际操作。

    因此...

    问:当赋值运算符的优先级最低时,y=x++y=x-- 有何不同?

    A:他们不是。

    【讨论】:

      【解决方案3】:

      运算符优先级和评估顺序是两个不同的概念,它们不相关。

      如果您有a() + b() * c(),这并不意味着首先调用b()c(),因为* 的优先级高于+a() 仍然首先得到评估。除非另有说明,否则评估顺序通常是从左到右。

      Java 编程语言保证 运算符似乎以特定的评估顺序进行评估, 即从左到右。

      https://docs.oracle.com/javase/specs/jls/se14/html/jls-15.html#jls-15.7

      【讨论】:

        猜你喜欢
        • 2016-12-28
        • 2016-12-27
        • 2020-03-22
        • 2015-09-06
        • 1970-01-01
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        相关资源
        最近更新 更多