与java中赋值操作的返回值混淆

与java中赋值操作的返回值混淆,java,Java,我试图理解赋值操作的返回值是如何工作的。 后跟“Java返回指定的值” b2为真是因为(b1==false)返回真,然后返回b2赋值b2=true 还是因为其他原因?你说得对。确保首先计算=运算符。这是b1==false,产生true。然后,执行分配的,将b2设置为true。最后,赋值运算符将值返回为b2,由if语句对其进行计算。这是赋值的优先游戏,且等于@暂停此处:inti=doIt()/(j=2),为什么方法执行先于分组和访问运算符?thanksJava通常从左到右评估术语(与我们人类非常相

我试图理解赋值操作的返回值是如何工作的。 后跟“Java返回指定的值”

b2为真是因为
(b1==false)
返回真,然后返回b2赋值
b2=true


还是因为其他原因?

你说得对。确保首先计算
=
运算符。这是
b1==false
,产生true。然后,执行分配的,将
b2
设置为true。最后,赋值运算符将值返回为b2,由
if
语句对其进行计算。

这是
赋值的
优先
游戏,且
等于
@暂停此处:
inti=doIt()/(j=2),为什么方法执行先于分组和访问运算符?thanksJava通常从左到右评估术语(与我们人类非常相似,至少在西半球是这样)。所以我们从
doIt
开始。接下来我们看到的是一个
()
。这是最高优先级,所以我们调用函数。之后,我们遇到了
/
,优先级13。然后是另一个
,优先级16。因此我们首先计算
j=2
。完成后,我们返回到除法。这恰好是计算的最后一步。另一个可能的解释是
doIt()
是一个单数名词。在Java中,你不能用方法的名称做任何事情。其他编程语言可能会将其视为自己的有用实体(函数指针、lambda表达式等).Java不会做这样的事情。如果它在表达式中找到一个方法名,唯一明智的做法就是执行它。从这个角度来看,
doIt
()
属于一起,不能分开。它们是表达式的一个单独的atomar术语。不管接下来发生什么,都会首先对该方法求值,这也就不足为奇了。
    boolean b1 = false, b2 = false;
    if (b2 = b1 == false) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }