这一篇博客我们想介绍一下Interger的缓冲区
主要是通过一个面试题来介绍
s1 和 s2 很好理解,就是new了两个不同的对象,比较的话肯定是不相等的了
s3 和 s4怎么理解呢?其实就是一个装箱操作,把一个int类型的基本数据转化成引用类型的数据。由于他们转化的都是同一个数据,所以是相等的。不好理解的话,请看下一个解释
s5 和s6 怎么理解呢?他们不是和上一个一样的操作吗?怎么改了一个数字就不一样啦,咱们打开它的valueOf源码看一下
源码的意思大概是:当int的值,在-128和127之间的时候,咱们取得就是同一个值,对象也就是同一个。为什么呢?因为当成一个缓存来理解吧,在堆里面就有这么一个缓存,里面的对象的范围就是这么多,超过这个范围的数据,就看return这行代码,这行代码就是新建了对象,所以S5.S6 不相等
为什么会有这么一个缓冲区呢?
Java预先创建了256个常用的整数包装类型对象,为了就是省事,减少内存消耗