2. 如果两个Integer的值相等,使用==进行判断的结果是否相等(常量池问题)?
这个问题在之前看到过的一个博客有说过,我也得到一定提示。非常有意思。
首先我们要理解Integer是int基本数据类型的封装类,也就是创建时应该是创建一个引用,并将引用指向这个对象。将真正数值存储在堆栈中,而且真正指向这个对象。
从这里可以看出来了。当定义两个个Integer对象为-128到127中时,其实是不会创建新的引用的的,但是当超过这个范围后,就会创建一个新的引用,由于引用指向的地址都是不同的,所以两个比较的地址不同,所以返回结果自然是false。
源码如下:
其中low为-128,high为127.
这个题其实论述的是java在Integer中的拆箱装箱问题。所以在使用基本数据类型的封装类时,如果需要比较,最好使用equal()来实现。