布尔值和== vs =

时间:2012-09-13 03:58:22

标签: java boolean

语言是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完全相同?

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

3 个答案:

答案 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允许将赋值用作表达式。