Integer缓冲区
文章目录
- 常见面试题:
- 总结
Integer缓冲区是Java预先创建的一个固定范围的Integer对象缓存池(默认-128到127),用于自动复用频繁使用的整数值,减少内存开销和对象创建。当通过自动装箱或Integer.valueOf()生成该范围内的整数时,直接返回缓存对象而非新建实例。
常见面试题:
分析下面代码的输出
Integer i1 = new Integer(127);Integer i2 = new Integer(127);System.out.println(i1 == i2);//false new都是开辟新的内存空间Integer i3 = 127;Integer i4 = 127;System.out.println(i3 == i4);// true/*在自动装箱的情况下,会在Integer常量池中缓存 [-128,127]之间的Integer常量对象,所以 i3 和 i4都是从缓存中取的,直接从堆内存中返回数据不再new新的对象,所以两个对象的内存地址相同*/Integer i5 = 128;Integer i6 = 128;System.out.println(i5 == i6);// false/*不在常量池的范围内,包装类自动装箱的底层原理还是new对象,所以还是在内存中开辟了两个新的地址所以是false*/// Integer.valueOf();方法也适用于上面的理论System.out.println("~~~~~~~~~~~~~~~");Integer i7 = Integer.valueOf(3);Integer i8 = Integer.valueOf(3);System.out.println(i7 == i8);// tureInteger i9 = Integer.valueOf(128);Integer i10 = Integer.valueOf(128);System.out.println(i9 == i10);// ture}