问题描述:
public class IntegerTest {
public static void main(String[] args) {
Integer a = 5;
Integer b = 5;
System.out.println("a==b:" + (a==b));
Integer c = 200;
Integer d = 200;
System.out.println("c==d:" + (c==d));
Integer e = new Integer(5);
Integer f = new Integer(5);
System.out.println("e==f:" + (e==f));
}
}
输出结果:
a==b:true
c==d:false
e==f:false
说明:
JVM对Byte、Short、Integer、Long、Character进行了缓存,缓存范围为 -128 到 127(Character范围为 0 到 127)。因此 ‘a==b:true’,但是** ‘c==d:false’,e和f使用了new,对象是分配到堆内存中的,e==f判断的是地址是否相同,因此‘e==f:false’**
备注:
只有Integer可以指定缓存的范围(-XX:AutoBoxCacheMax=size设置上届,下界不能指定,只能为-128),其它类都不行。