布尔值和== vs =

语言是Java。 鉴于这种:

public static void main(String[] args) { Boolean b1 = true; Boolean b2 = true; int i1 = 1; if (b1 = true) //line 5 if (b1 == true} // line 6 

我知道b1 == true是一个等价的测试,它将给出结果:true或false。 但是,在b1 = true ,我理解的是一个声明,除了在这种情况下它应该返回: b1 = true返回true,与== test完全相同?

你能解释一下原因吗? 谢谢!

if (identifier = literal)求值为:

 identifier = literal; if (identifier) 

首先,您将文字分配给标识符。 然后你测试它分配后

当你写作

 b1 = true; 

true被分配给b1。

当你写作

 if(b1 = true) 

首先完成赋值,然后计算表达式,表达式求值为b1值,即为true

两者都返回true的原因很简单,因为两个表达式都是真的。

b1 = true是一个赋值 – >你告诉java b1是真的,当它计算它时它变为真,因为这里你简单地说b1为真。

b1 == true是一个条件 – >这是一个有意义的行,因为你现在正在检查b1的[value]是否等于true,这将根据b1是否为真来评估为真或假。 请注意,您可以编写b1,因为它已经是布尔值(true或false)。

我认为你没有意识到它,但你使用的是对象类型的布尔值而不是基本类型布尔值。 如果你真的不知道Java中基于对象的类型和原始类型之间的差异,你应该坚持使用小写字母b。

顺便说一下,我不知道Java允许将赋值用作表达式。