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

2022-09-01 10:28:50

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


答案 1

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

这取决于你是在谈论s(对象包装器,注意大写字母)还是s(基元,注意小写)。如果你在谈论 s(对象包装器),就像所有对象一样,检查标识,而不是等价。如果你在谈论s(基元),它会检查等价性。BooleanBbooleanbBoolean==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

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...

它并不是一个真正的“and”:只会检查两个变量是否引用同一个实例。当然,一个实例只能有一组内容,因此,如果两个变量都指向同一实例,则内容自然是相同的... :-)关键点是,即使它们具有相同的字符,也会针对不同的实例进行报告。这就是为什么我们在它们上使用,而不是.字符串可能会因为 interning 而变得有点混乱,这是特定于字符串的(没有等效项,尽管当你使用 时,你会得到一个缓存的对象)。还要注意,Java 没有像原语 、 等那样的原始字符串。==StringStringString==falseStringequals==BooleanBoolean.valueOf(boolean)booleanint


答案 2

如果你有一个对象使用等于,当没有时,你可以在这样的事情上运行。(用于自动装箱基元的 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