==检查布尔值是否完全相等? - Java

时间:2012-06-17 16:18:53

标签: java boolean equals-operator

所以我听说如果我将2个字符串与==进行比较,那么只有当它们都引用相同的对象/实例时才会得到回报。这是字符串。布尔人怎么样?

4 个答案:

答案 0 :(得分:40)

  

==检查布尔值是否完全相等? - Java

这取决于你是在谈论Boolean s(对象包装器,注意大写B)还是boolean s(原语,注意小写{{1 }})。如果您正在讨论b s(对象包装器),与所有对象一样,Boolean会检查身份,而不是等效。如果你在谈论== s(原语),它会检查等价性。

所以:

boolean

但是

Boolean a, b;
a = new Boolean(false);
b = new Boolean(false);
System.out.println("a == b? " + (a == b)); // "a == b? false", because they're not the same instance

关于字符串:

  

我听说如果我将2个字符串与==进行比较,那么只有字符串相同并且它们都引用相同的对象/实例时我才会得到真实...

它并非真正的“和”:boolean c, d; c = false; d = false; System.out.println("c == d? " + (c == d)); // "c == d? true", because they're primitives with the same value 检查两个==变量是否引用相同的String实例。当然,一个String实例只能有一组内容,所以如果两个变量都指向同一个实例,那么内容自然是相同的...... :-)关键点是String将为不同的 ==个实例报告false,即使它们在相同的顺序中具有相同的字符。这就是为什么我们对它们使用String,而不是equals。由于interning,字符串可能会有点混乱,这是字符串特有的(==没有等价物,但是当你使用Boolean时,你会得到一个缓存的对象)。另请注意,Java没有原始字符串,如原始Boolean.valueOf(boolean)boolean等。

答案 1 :(得分:2)

如果你有一个Object使用equals, 什么时候不能,你可以运行这样的事情。 (用于自动装箱原语的VM缓存)

    public static void main(String[] args){
       Boolean a = true;
       Boolean b = true;
       System.out.println(a == b);
       a = new Boolean(true);
       b = new Boolean(true);
       System.out.println(a == b);
   }

输出为TRUE且为FALSE

答案 2 :(得分:1)

这取决于您是否在谈论价值类型,例如:intbooleanlong或参考类型:IntegerBoolean,{{ 1}}。值类型可与Long进行比较,参考类型必须与==进行比较。

答案 3 :(得分:0)

将(==)与布尔值一起使用时,

  1. 如果其中一个操作数是布尔包装器,则首先将其拆箱 变成布尔型原语,然后将两者进行比较。

  2. 如果两者都是使用'new'关键字创建的布尔包装,则它们的     引用就像其他对象一样进行比较。 new Boolean("true") == new Boolean("true")是错误的

  3. 如果两个都是布尔包装器,并且创建时都没有'new'关键字,

    Boolean a = false;
    Boolean b = Boolean.FALSE;
    // (a==b) return true