Integer的IntegerCache

1.Integer i = Integer.valueOf("100");

Integer i = Integer.valueOf("100"); 

2.Integer i = 100;

Integer i = 100;   //把整数常量赋值给整数包装类型,实际上调用了Integer.valueOf方法

通过查看源码可以看到Integer.valueOf使用了IntegerCache

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

该段代码的意思当int在[-128,127]之间,会从缓存中返回int值,所以:

public static void test() {
    Integer a = 1; // 等价于 Integer a = valueOf(1)
    Integer b = 1;
    System.out.println(a == b); // true

    Integer c = 128;
    Integer d = 128;
    System.out.println(c == d); // false
    System.out.println(c.equals(d)); // true
}

而用new Integer()创建的int对象,则为:

public static void test() {
    Integer a = new Integer (1); 
    Integer b = new Integer (1);

    System.out.println(a == b);  // false
    System.out.println(c.equals(d)); // true
}

对比String类型

public static void test() {
    String a = "aa"; 
    String b = "aa";

    System.out.println(a == b);  // true
    System.out.println(c.equals(d)); // true
}

这是因为用这种方式创建String类型,会先去String pool(缓存池)查看有没有aa,如果有,则直接返回,所以此处System.out.println(a == b); 是 true

你可能感兴趣的:(Integer的IntegerCache)