缓冲池、String/StringBuffer/StringBuilder、intern()

1.缓冲池

1.1 new Integer(123) 与 Integer.valueOf(123) 的区别在于:

  • new Integer(123) :每次都会新建一个对象
  • Integer.valueOf(123) :会使用缓存池中的对象,多次调用会取得同一个对象的引用。
Integer x = new Integer(123);
Integer y = new Integer(123);
System.out.println(x == y); // false
Integer z = Integer.valueOf(123);
Integer k = Integer.valueOf(123);
System.out.println(z == k); // true

1.2 valueOf() 方法的实现

先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。

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

1.3 在 Java 8 中,Integer 缓存池的大小默认为 -128~127。

1.4 自动装箱

编译器会在自动装箱过程调用 valueOf() 方法

你可能感兴趣的:(#,Java基础,String,StringBuffer,StringBuilder,intern())