public class AutoBoxTest { public static void main(String[] args) { Integer a1 = 127; Integer a2 = 120 + 7; System.out.println(a1 == a2); Integer b1 = 128; Integer b2 = 120 + 8; System.out.println(b1 == b2); Integer s1 = 2002; short s2 = 2002; System.out.println(s1 == s2); } }
上面代码运行结果:
- 结果1和2不一样的原因:
java中常量进行自动包装时,调用的是Integer.valueOf()方法,在Integer中有一个静态缓存类IntegerCache,该类默认会缓存-128到127之间的值,调用valueOf方法时,如果值在该缓存区间范围内,之间从缓存获取对象,否则直接new一个新对象返回。
备注:缓存最大值可以通过虚拟机参数-XX:AutoBoxCacheMax=<size>设置,最小值不能小于127
- 结果3为什么是true?
反编译代码,如下:
当包装对象和常量进行比较时,包装对象会先转成常量,再比较