美文网首页
包装类型对象的值比较,为什么不能使用==

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

作者: 温暖的纯真 | 来源:发表于2020-03-15 17:51 被阅读0次

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

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


    image.png

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

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

    相关文章

      网友评论

          本文标题:包装类型对象的值比较,为什么不能使用==

          本文链接:https://www.haomeiwen.com/subject/qoteehtx.html