==检查布尔值是否完全相等? – Java
所以我听说如果我将2个字符串与==进行比较,那么只有当它们都引用相同的对象/实例时我才会得到回报。 这是字符串。 布尔人怎么样?
==检查布尔值是否完全相等? – Java
这取决于你是在谈论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个字符串与==进行比较,那么只有当字符串相同并且它们都引用相同的对象/实例时我才会得到真实的…
它不是真正的“和”: ==
只会检查两个String
变量是否引用相同的String
实例。 当然,一个String
实例只能有一组内容,所以如果两个变量都指向同一个实例,那么内容自然是相同的…… :-)关键点是==
将为不同的 String
实例报告false
即使它们在相同的顺序中具有相同的字符。 这就是为什么我们在它们上使用equals
,而不是==
。 字符串可能会因为intern
而变得有点混乱,这是特定于字符串的(对于Boolean
没有等价物,尽管当你使用Boolean.valueOf(boolean)
,你将得到一个缓存的对象)。 还要注意Java没有像原始boolean
, int
等原始字符串。
这取决于你是否在谈论值类型,如: int
, boolean
, long
或about reference types: Integer
, Boolean
, Long
。 值类型可以与==
进行比较,引用类型必须与equals
进行比较。
如果你有一个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