参考答案
1. IntegerCache介绍
IntegerCache是JDK在版本1.5中添加的一项新特性,为Integer类的缓存类,默认缓存了-128~127的Integer值,如遇到[-128,127]范围的值需要转换为Integer时会直接从IntegerCache中获取,用于提升性能和节省内存。
所以,这个范围内的自动装箱(相当于调用valueOf(int i)方法)的数字,都会从缓存中获取,返回同一个数字。
用两个实例来帮助理解,加深印象。
2. IntegerCache实例
实例一
private static class IntegerCache { static final int high; static final Integer cache[]; static { final int low = -128; // high value may be configured by property int h = 127; if (integerCacheHighPropValue != null) { // Use Long.decode here to avoid invoking methods that // require Integer's autoboxing cache to be initialized int i = Long.decode(integerCacheHighPropValue).intValue(); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - -low); } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); } private IntegerCache() {} }
在代码中看到,low为-128,high为127。
在Java编程中,如要使用-128——127这个区间的对象,是直接使用这个Cache中的对象的。
举个例子,代码如下:
package p201108.practicalBook.chapter02; public class AutoBoxingTrouble1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Integer x = 10; Integer y = 10; if(x == y) { System.out.println(" x == y"); } else { System.out.println(" x != y"); } } }
结果:
x == y
实例二
不在缓冲区内
package p201108.practicalBook.chapter02; public class AutoBoxingtrouble2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Integer x = 500; Integer y = 500; if(x == y) { System.out.println(" x == y"); } else { System.out.println(" x != y"); } } }
结果:
x != y
在自动装箱AutoBoxing方面,可见Java却是做了一些工作来提高效率。
如果需要确切的、可控制的对象,还是要使用new关键字来初始化对象。
例如:
package p201108; public class Test01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Integer value1 = new Integer(10); Integer value2 = new Integer(10); if(value1 == value2) { System.out.println(" value1 == value2"); } else { System.out.println(" value1 != value2"); } } }
结果:
value1 != value2
以上,是Java面试题【IntegerCache类的作用】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—