Java中的Integer

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37872413/article/details/82392351

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

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

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

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

综上,对于Integer类型的对象进行比较,最好是使用equals方法进行比较。

猜你喜欢

转载自blog.csdn.net/m0_37872413/article/details/82392351