關於 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) 面試
會點代碼的大叔 | 文【原創】數組