簡介:Integer是Java經常使用類,關於它的面試題層出不窮,在這裏總結一下。面試
1.Integer和int的區別和聯繫?緩存
1.int是基本數據類型,缺省值爲0,佔內存4個字節。
2.Integer是引用類型,缺省值爲null。
3.Integer和int之間相互轉換存在自動拆裝箱的過程。
複製代碼
2.代碼以下微信
public static void main(String[] args) {
Integer a = 200;
Integer b = 200;
System.out.println(a == b);
System.out.println(a.equals(b));
}
上述程序執行的結果:
false
true
解析:Integer默認的數字緩存區間爲-128~127[a],當數字在這個區間的時候,Integer a = 200;直接從IntegerCache中讀取數據,不會建立新的對象(相似於字符串常量池),若是超出這個區間[a]就會構造新的Integer對象。"=="是引用比較,"equals"是對象的值比較(Integer重寫了equals方法),a,b是不一樣的對象,==比較爲false,他們的值相同都爲200,equals爲true。
複製代碼
重點網站
特例:上述執行程序可能會有相反的結果,System.out.println(a == b)也可能爲true。spa
解析:
能夠經過修改JVM啓動參數修改IntegerCache上限(-XX:AutoBoxCacheMax=250),Java進程啓動時,會加載rt.jar這個核心包,rt.jat裏面的Integer天然也被加載到JVM中,Integer中有個IntegerCache緩存,描述以下:
IntegerCache有一個靜態代碼塊,JVM在加載這個類的時候會優先加載靜態代碼塊。當JVM進程啓動完畢後-128~127之間的數字就會被緩存起來,調用valueOf方法的時候,若是是在這個區間的數字直接從緩存中取,超過這個範圍就只能構造新的Integer對象。
複製代碼
注意code
使用Oracle/Sun JDK 6,在server模式下,使用-XX:AutoBoxCacheMax=NNN參數便可將Integer的自動緩存區間設置爲[-128,NNN],下邊界固定爲-128,不可配置。
在設置了-XX:+AggressiveOpts啓動參數後,AutoBoxCacheMax的默認值會被修改成20000而且生效。
複製代碼
這篇文章主要是記錄第二個面試,順便回憶一下Integer和int的區別。cdn