所以我听说如果我将2个字符串与==进行比较,那么只有当它们都引用相同的对象/实例时才会得到回报。这是字符串。布尔人怎么样?
答案 0 :(得分:40)
==检查布尔值是否完全相等? - Java
这取决于你是在谈论Boolean
s(对象包装器,注意大写B
)还是boolean
s(原语,注意小写{{1 }})。如果您正在讨论b
s(对象包装器),与所有对象一样,Boolean
会检查身份,而不是等效。如果你在谈论==
s(原语),它会检查等价性。
所以:
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
关于字符串:
我听说如果我将2个字符串与==进行比较,那么只有字符串相同并且它们都引用相同的对象/实例时我才会得到真实...
它并非真正的“和”: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
仅检查两个==
变量是否引用相同的String
实例。当然,一个String
实例只能有一组内容,所以如果两个变量都指向同一个实例,那么内容自然是相同的...... :-)关键点是String
将为不同的 ==
个实例报告false
,即使它们在相同的顺序中具有相同的字符。这就是为什么我们对它们使用String
,而不是equals
。由于intern
ing,字符串可能会有点混乱,这是字符串特有的(==
没有等价物,但是当你使用Boolean
时,你会得到一个缓存的对象)。另请注意,Java没有原始字符串,如原始Boolean.valueOf(boolean)
,boolean
等。
答案 1 :(得分:2)
如果你有一个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
答案 2 :(得分:1)
这取决于您是否在谈论价值类型,例如:int
,boolean
,long
或参考类型:Integer
,Boolean
,{{ 1}}。值类型可与Long
进行比较,参考类型必须与==
进行比较。
答案 3 :(得分:0)
将(==)与布尔值一起使用时,
如果其中一个操作数是布尔包装器,则首先将其拆箱 变成布尔型原语,然后将两者进行比较。
如果两者都是使用'new'关键字创建的布尔包装,则它们的
引用就像其他对象一样进行比较。 new
Boolean("true") == new Boolean("true")
是错误的
如果两个都是布尔包装器,并且创建时都没有'new'关键字,
Boolean a = false;
Boolean b = Boolean.FALSE;
// (a==b) return true