【问题标题】:how line 2 is evaluated in java 8? [duplicate]如何在 java 8 中评估第 2 行? [复制]
【发布时间】:2018-11-16 22:10:01
【问题描述】:
int f = 1;
f = f++;
System.out.println(f);

后自增运算符的优先级高于赋值运算符,因此 我想 f 的值(即 1)用于赋值并且 f 递增然后输出将是 2(因为 f 的值现在是 2) 但输出为 1,但如何?我哪里错了?

我的解释在下面的代码中得到正确答案

int f = 1;
int g = f++;
System.out.println(f);

在这种情况下输出为 2。

【问题讨论】:

    标签: java-8 assignment-operator post-increment


    【解决方案1】:

    在评估值之前,您不能将值分配给变量。因此,您必须首先评估f++。由于f++ 返回 1,这就是分配给f 的值,它会覆盖f 的递增值。

    您的第二个 sn-p 是一个完全不同的场景,因为您将 f++ 的值分配给不同的变量,所以 f 的增量值不会被覆盖。

    【讨论】:

    • 要获得输出 2 @Jilson 需要像 f = ++f;我说的对吗?
    • @SudhirOjha 这会起作用,因为++f 将返回 2。当然,没有理由将 ++ff++ 的值分配回 f
    • 似乎对“更高优先级”的含义有一个普遍的误解。实际上,OP 是正确的,因为后自增运算符的优先级高于赋值运算符。但这只是意味着它是在分配之前进行评估的,因此后续分配会取消其副作用。 OP 似乎假设增量将在分配之后发生,但这与优先规则相矛盾。
    猜你喜欢
    • 2020-12-11
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多