==检查布尔值是否完全相等? – 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没有像原始booleanint等原始字符串。

这取决于你是否在谈论值类型,如: intbooleanlong或about reference types: IntegerBooleanLong 。 值类型可以与==进行比较,引用类型必须与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