== 是否检查布尔值中的完全相等?- 爪哇
2022-09-01 10:28:50
所以我听说,如果我将2个字符串与==进行比较,那么只有当它们都引用相同的对象/实例时,我才会得到true。那是字符串。那么布尔值呢?
所以我听说,如果我将2个字符串与==进行比较,那么只有当它们都引用相同的对象/实例时,我才会得到true。那是字符串。那么布尔值呢?
== 是否检查布尔值中的完全相等?- 爪哇
这取决于你是在谈论s(对象包装器,注意大写字母)还是s(基元,注意小写)。如果你在谈论 s(对象包装器),就像所有对象一样,检查标识,而不是等价。如果你在谈论s(基元),它会检查等价性。Boolean
B
boolean
b
Boolean
==
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 没有像原语 、 等那样的原始字符串。==
String
String
String
==
false
String
equals
==
Boolean
Boolean.valueOf(boolean)
boolean
int
如果你有一个对象使用等于,当没有时,你可以在这样的事情上运行。(用于自动装箱基元的 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