【问题标题】:Java Postincrement and Operator Precedence [duplicate]Java后增量和运算符优先级[重复]
【发布时间】:2021-03-08 13:18:53
【问题描述】:

我对这段代码有点困惑:

int r = 7;
boolean result1 = r == r++; //
boolean result2 = r++ == r; //

System.out.println(result1);
System.out.println(result2);

我认为两者都是真的,但结果 1 为真,结果 2 为假。

Oracle 教程并没有真正的帮助,在 Java 语言规范中我也没有找到任何答案。到目前为止,我不明白,后自增运算符如何具有最高的运算符优先级。

【问题讨论】:

  • 试着大声说出result1 “7 等于 7,然后将 7 加一吗?”并且,对于result2,“8 增加 1 等于 8?”您还可以尝试在事物周围加上括号来强制优先。
  • 即使在 Java 中,也可以编写非常晦涩的代码,这是一个示例。不仅仅是运算符优先级,希望这能教给我们关于编码风格的一课——我们永远不会在生产代码中写出这样的行。
  • 这实际上与运算符优先级无关,而是与从左到右的评估顺序有关。

标签: java operator-keyword operator-precedence post-increment


【解决方案1】:

Java 对表达式逐一求值。

当它评估r++时,结果是7,但副作用立即应用,所以当它评估r时,结果是r8)的新值。

这就是为什么增量/减量表达式不应该用在复杂表达式中的原因。

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 2015-04-17
    • 2018-08-22
    • 1970-01-01
    • 2013-06-18
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多