Integer, Byte, Short, Long, Character对应值在[-128,127]中时,使用常量池
String 也使用了常量池技术
Float, Double没有使用常量池
Integer a = 59; Integer b = Integer.valueOf(59);都会进行判断是不是在常量池
Integer a = new Integer(59);那就直接分配在堆中了,就是不同的对象了
public class IntegerCache {
public static void main(String[] args) {
Integer a = 128;
int b = 128;
Integer c = Integer.valueOf(128);
Integer d = new Integer(128);
Integer e = new Integer(128);
System.out.print(a==b);
System.out.print(a==c);
System.out.print(a==d);
System.out.println();
System.out.print(c==b);
System.out.print(d==b);
System.out.println();
System.out.print(c==d);
System.out.println();
System.out.print(d==e);
}
}
