【问题标题】:java operator precedence y = x+ (x=10); [duplicate]java 运算符优先级 y = x+ (x=10); [复制]
【发布时间】:2016-12-27 19:36:39
【问题描述】:

让我们考虑

int x=1;
int y1 = (x=10) + x;
System.out.println(y1);
// prints 20

x = 1;
int y2 = x + (x=10);
System.out.println(y2);
// prints 11

在第一个例子中,() 是最先执行的,因为它的优先级最高;将 x 值设置为 10,因此右侧操作数 (x) 获得新值 10,因此 y1 = 10+10 = 20

在第二个例子中,左边的操作数'x'得到它的值1,然后()被执行并且x得到它的新值10,所以y2 = 1+10 = 11;

为什么在第二个例子中, () 没有被首先执行;所以 (x=10) 首先执行,左侧操作数 x 应设置为其新值 10,因此 y2 = 20;但事情不是这样发生的?

【问题讨论】:

  • 不要将优先级与操作数的计算顺序混淆。

标签: java operator-precedence


【解决方案1】:

我相信操作数只是从左到右计算的。右侧操作数中的括号不会改变左侧操作数首先被求值的事实。

【讨论】:

【解决方案2】:

也许考虑int z = f() + g() 会有所帮助,即调用两种方法。为什么要先调用g()int z = f() + (g()) 怎么样(注意额外的括号)?从左到右是正在发生的事情,其中​​(x=10) 只是一个构造,在评估时分配给x 并将10 返回到使用此构造的位置。

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 1970-01-01
    • 2015-09-06
    • 2021-08-28
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多