关于 Java 字符串 String 有一道很基础的面试题,相信不少人都遇到过,就是 String s = "a" 和 String s = new String("a") 的区别是什么?相信你们都能回答上来。
那么你知道这三者有什么区别么?java
Integer i = new Integer(1) ;
Integer i = Integer.valueOf(1) ;
Integer i = 1 ;
复制代码
为了提升性能,Java 在 1.5 之后针对八种基本类型的包装类,提供了和 String 类同样的对象池机制;
让咱们看一下 Integer.valueOf(int i) 的源码,就很容易理解了:nginx
public final class Integer extends Number implements Comparable<Integer> {
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
}
复制代码
Integer i = 1 ;
复制代码
等号左边是 Integer 类型,等号右边是 int 类型 ,这种写法叫作装箱(基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成),而装箱操做是经过 Integer.valueOf(1) 完成的,因此:web
Integer i = 1 等同于 Integer.valueOf(1) 面试
会点代码的大叔 | 文【原创】数组