A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 不二晨 金牌黑马   /  2019-2-22 16:48  /  1346 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer作为一个基本数据类型的包装类,在开发中会经常使用到。今天在使用Integer的时候发现了一个需要注意的地方——使用“==”比较两个Integer类型的对象。

答案是,使用“==”比较两个Integer类型的对象是不准确的。不是基本数据类型的变量使用“==”比较,其实质比较的是变量的内存地址是否相同,所以一般情况下,不是基本数据类型的变量进行比较,都是重写继承于Object类的equals方法,使用equals方法来进行比较。

在Integer中,存在一个缓存空间,这个缓存空间里面装入了从-127到128的数,当你创建一个在该范围之内的Integer对象时,这个对象相当于就是指向这个缓存中的某个值;所以,如果你创建了很多个相同的值的Integer对象,并且值的范围在-127到128之间,那么他们其实指向的是同一个值,这个时候,使用“==”进行比较也会得到正确的结果。

但是如果你创建的多个Integer对象的值的范围不在-127到128之间,那么每个对象在加载时,都会使用new关键字来创建一个新的内存空间,所以本质上,这些Integer对象的内存地址都是各不相同的,那么这个时候使用“==”进行比较就会得到错误的结果。

综上,对于Integer类型的对象进行比较,最好是使用equals方法进行比较。
---------------------
【转载,仅作分享,侵删】
作者:m0_37872413
原文:https://blog.csdn.net/m0_37872413/article/details/82392351
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马