在Java中,赋值操作的返回值让我感到困惑。

3

我试图理解赋值操作的返回值如何工作。 接着阅读这篇文章,“Java返回已分配的值”。

    boolean b1 = false, b2 = false;
    if (b2 = b1 == false) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }
是真的,因为(b1 == false)返回true,那么被赋值为true

还是因为其他原因呢?


这是关于“优先级”、“赋值运算符”和“等于运算符”的程序编程内容。@Pau - jack jay
请查看此处:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html - GhostCat
1个回答

4
你已经理解得很对了。运算符优先级规则确保首先评估 == 运算符。这是b1==false,产生true。之后,执行分配,将b2设置为true。最后,赋值运算符将该值作为b2返回,由if语句评估。

int i = doIt() / (j = 2); 这段代码为什么在执行方法之前就进行了分组和访问运算符?这是因为它们在 操作符优先级和括号 的顶层。谢谢! - Pauwelyn
Java通常从左到右评估术语(就像我们人类在西半球至少这样做)。所以我们从doIt开始。接下来我们看到的是一个(), 这是最高优先级,所以我们调用函数。之后我们遇到了/,优先级为13。它后面跟着另一个(), 优先级为16。所以我们首先评估j=2。完成后,我们返回到除法。这是评估的最后一步。 - Stephan Rauh
另一个可能的解释是doIt()是一个单数术语。在Java中,您无法对方法名称执行任何操作。其他编程语言可能将其视为自己的有用实体(函数指针、lambda表达式等)。但Java不会这样做。如果它在表达式中找到一个方法名,唯一明智的事情就是执行它。从这个角度来看,doIt()是一起的,不能分开。它们是表达式的单个原子项。难怪该方法首先被评估,无论接下来发生什么。 - Stephan Rauh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接