包装类型对象的值比较,为什么不能使用==

2020-03-15  本文已影响0人  温暖的纯真

使用==和!=来比较对象,是比较栈上两个对象是不是指向堆上的同一个对象,即引用地址是否相等。

对于基本类型的常量池,JVM会自动维护,自动装箱过程中取常量池中的值。但基本类型数值有其大小范围,如:


image.png

超过这个范围,会new()新的对象,生成新的内存地址,使用==比较的内存地址就是不相等的,因为hashcode()的默认行为就是对堆上的对象产生独特值,没有重写hashcode(),两个对象不会相等==(即使两个对象的数据相同)。

而equals()是执行对象值的比较。所以,相同类型的包装类对象之间值的比较,使用equals()方法。对于String 类,已经重写了hashCode()和equals()方法,所以==执行的是对象相等性的比较而不是引用。

上一篇 下一篇

猜你喜欢

热点阅读