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