当你比较对象引用,==
是当引用参考同一个对象,并不等同对象定义为true
。 (这就是equals
的用途。)
对于基元,==
定义为true
等效值。
在第一个示例中,您有两个不同的对象,一个分配给a
,另一个分配给b
。这是因为您要分配给引用类型的原语是“autoboxed”(自动包装在原语的等效对象类型中)。您的代码:
Object a = 128;
Object b = 128;
...是有效的治疗是这样的:
Object a = Integer.valueOf(128);
Object b = Integer.valueOf(128);
...其中Integer.valueOf
返回Integer
对象包装你给它的价值,这可能会或可能不会是相同的对象用于具有相同值的后续调用,具体取决于您给予的值。根据JavaDoc:
如果不需要新的Integer
例如,这种方法一般应优先使用构造Integer(int)
,因为此方法可能通过缓存经常请求的值,以产生显著更好的空间和时间性能。此方法将始终缓存-128至127(含)范围内的值,并可缓存此范围之外的其他值。
因此,这意味着,当你与价值127跑了,你得为每个调用同一对象回Integer.valueOf
,所以==
工作。但是对于128,每个调用都会得到不同的对象,因此==
不起作用,因为它再次检查两个引用是指相同对象,而不是等价对象。
请记住,当你真的想要使用'equals()'时,不要使用'==' – Shark 2013-04-08 13:59:08