一 Integer 类
Integer i=new Integer(1);
上面代码会在堆中生成一个对象。
Integer i=1;
上面代码会调用Integer.valueOf()方法,该方法会缓存-128-127之间的对象,如果i 处于该范围,则直接返回缓存对象。
Integer.valueOf 方法:
public static Integer valueOf( int i) {
assert IntegerCache. high >= 127;
if (i >= IntegerCache. low && i <= IntegerCache. high )
return IntegerCache. cache[i + (-IntegerCache. low)];
return new Integer(i);
}
二 String 类
String 类也会采用类似的策略。
String s="ad";
会首先从常量池中查找对象。
String s=new String("ad").intern()
对应的是intern方法,如果常量池中不存在指定的字符串对象,intern方法会把对象复制到常量池中。(jdk 1.7后是复制对象的引用)