31

所以我听说如果我将 2 个字符串与 == 进行比较,那么只有当它们都引用同一个对象/实例时,我才会返回 true。那是字符串。布尔值呢?

4

4 回答 4

54

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

这取决于您是在谈论Booleans (对象包装器,注意大写B)还是booleans (原始,注意小写b)。如果您在谈论Booleans (对象包装器),与所有对象一样,==检查identity,而不是equivalence。如果您在谈论booleans(原语),它会检查等价性。

所以:

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

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

关于字符串:

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

它不是真正的“和”:==只会检查两个变量是否引用同一个实例。当然,一个实例只能有一组内容,所以如果两个变量都指向同一个实例,那么内容自然是相同的...... :-) 关键是即使它们有不同的实例也会报告相同的字符以相同的顺序。这就是我们使用它们的原因,而不是. 由于ing,字符串可能会有些混乱,这是字符串特有的(没有等效的,尽管当您使用 时,您将获得一个缓存的对象)。另请注意,Java 不像原始字符串那样具有原始字符串StringStringString==false Stringequals==internBooleanBoolean.valueOf(boolean)boolean,int等。

于 2012-06-17T16:22:38.763 回答
4

如果你有一个 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

于 2014-11-18T13:54:19.087 回答
3

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

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

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

  3. 如果两者都是布尔包装器,创建时没有“新”关键字,

    Boolean a = false;
    Boolean b = Boolean.FALSE;
    // (a==b) return true
    
于 2019-07-20T03:18:06.613 回答
1

这取决于您是在谈论值类型,例如:,,int还是引用类型:,,,。值类型可以与 比较,引用类型必须与 比较。booleanlongIntegerBooleanLong==equals

于 2012-06-17T16:23:25.593 回答