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

Blu*_*ire 25 java boolean equals-operator

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

T.J*_*der 43

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

这取决于你是在谈论Booleans(对象包装器,注意大写B)还是booleans(原语,注意小写b).如果您正在谈论Booleans(对象包装器),就像所有对象一样,==检查身份,而不是等效.如果你在谈论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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

关于字符串:

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

这不是一个真正的"和":==检查两者是否String变量指向同一个String实例.当然,一个String实例只能有一组内容,所以如果两个变量指向同一个实例,自然的内容是相同的... :-)关键的一点是,==将报告false不同的 String情况下,即使他们有相同的字符以相同的顺序排列.这就是我们使用equals它们的原因,而不是==.字符串因为interning而变得有点混乱,这是特定于字符串的(没有相应的Boolean,但是当你使用时Boolean.valueOf(boolean),你将得到一个缓存的对象).还要注意的是Java没有原始的字符串像它原始的boolean,int等等.

  • @Bluefire注意,如果你真的想要一个`Boolean`你永远不应该调用`new Boolean`,而是分别使用`Boolean.TRUE``Burle.FALSE`.如果遵循该规则,您实际上可以将它们与`=='进行比较(尽管您可能仍然不应该). (2认同)