布尔值和== 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允许将赋值用作表达式。