包名:java.lang
文件名:Integer.java
方法名: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