【问题标题】:confused with return value of assignment operation in java与java中赋值操作的返回值混淆
【发布时间】:2017-05-22 06:40:37
【问题描述】:

我试图了解赋值操作的返回值究竟是如何工作的。 后跟this post“Java 返回赋值”。

    boolean b1 = false, b2 = false;
    if (b2 = b1 == false) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }

b2为真因为(b1 == false)返回真,则b2赋值b2 = true返回

还是因为其他原因?

【问题讨论】:

标签: java


【解决方案1】:

你说得对。 operator precedence rules 确保首先评估 == 运算符。那是b1==false,结果是真的。之后,assigned 被执行,将b2 设置为true。最后,赋值运算符将值返回为 b2,由 if 语句计算。

【讨论】:

  • int i = doIt() / (j = 2);,为什么方法执行在分组和访问运算符之前?他们在Operator Precedence and Parentheses的顶层。谢谢
  • Java 通常从左到右评估术语(与我们人类非常相似,至少在西半球)。所以我们从doIt开始。接下来我们看到的是()。这是最重要的,所以我们调用这个函数。之后我们遇到/,优先级13。紧随其后的是另一个(,优先级16。所以我们首先评估j=2。完成后,我们回到部门。这恰好是评估的最后一步。
  • 另一种可能的解释是doIt() 是一个单数术语。在 Java 中,你不能用方法名做任何事情。其他编程语言可能会将其视为自己的有用实体(函数指针、lambda 表达式等)。 Java 不会做这样的事情。如果它在表达式中找到方法名称,唯一明智的做法就是执行它。从这个角度来看,doIt() 是一体的,不能分开。它们是表达式的一个单一的原子术语。难怪首先评估该方法,无论接下来发生什么。
猜你喜欢
  • 1970-01-01
  • 2011-07-19
  • 2020-12-29
  • 2016-03-05
  • 2015-10-27
  • 2019-12-05
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
相关资源
最近更新 更多