语言是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完全相同?
你能解释一下原因吗?谢谢!
答案 0 :(得分:14)
if (identifier = literal)
评估为:
identifier = literal;
if (identifier)
首先将文字分配给标识符。那么你在分配后测试它
答案 1 :(得分:1)
写作时
b1 = true;
true
已分配给b1。
写作时
if(b1 = true)
首先完成分配,然后评估表达式,表达式的计算结果为b1
,即true
。
答案 2 :(得分:1)
两者都返回true的原因很简单,因为两个表达式都是真的。
b1 = true是一项任务 - >你告诉java b1是真的,当它评估它时它变成了真,因为在这里你简单地说b1是真的。
b1 == true是一个条件 - >这是有道理的,因为您现在正在检查[b1]的值是否等于true,这将根据b1是否为真来评估为真或假。请注意,您可以编写b1,因为它已经是布尔值(true或false)。
我认为你没有意识到它,但你使用的是对象类型的布尔值而不是基本类型布尔值。如果你真的不知道Java中基于对象的类型和原始类型之间的差异,你应该坚持使用小写字母b。
btw我不知道Java允许将赋值用作表达式。