Integer装箱与常量池

比较如下两段代码

public class TestException {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer i2 = 100;
        System.out.println("i1 == i2 : "+ (i1 == i2));

        Integer a1 = 200;
        Integer a2 = 200;
        System.out.println("a1 == a2 : "+ (a1 == a2));
    }
}

i1 == i2 : true
a1 == a2 : false

为什么呢?
常量池。
200 调用Integer.valueOf()装箱。

Integer装箱与常量池_第1张图片
valueOf

判断当前var0的取值范围,-128~127之间,则从IntegerCache内存中取一个缓冲值,给缓存当中某个值的地址给当前,超过了就new,也就导致内存地址不一样了,也就不相等了。

你可能感兴趣的:(Integer装箱与常量池)