Java基礎-----JDK1.5的新特性自動裝箱和拆箱
阿新 • • 發佈:2018-12-08
JDK1.5的新特性
1、自動裝箱:把基本型別轉換為包裝類型別。
2、自動拆箱:把包裝類型別轉換為基本型別。
注意:在使用,Integer x = null;程式碼就會出現NullPointerException。
package StringBufferPackage; public class Test4 { public static void main() { int x = 100; Integer i1 = new Integer(x);//將基本資料型別包裝成物件,裝箱。 int y = i1.intValue();//將物件轉換為基本資料型別,拆箱。 Integer i2 = 100;//自動裝箱,把基本資料型別轉換為物件。 int z = i2 + 200;//自動拆箱,把物件轉換為基本資料型別。 Integer i3 = null; int a = i3 + 100;//底層i3呼叫intValue,但是i3是null,null呼叫方法就會出現空指標異常 System.out.println(a); } }
Integer的面試題
package StringBufferPackage; public class Test5 { public static void main(String[] args) { Integer i1 = new Integer(19); Integer i2 = new Integer(19); System.out.println(i1 == i2);//false System.out.println(i1.equals(i2));//true System.out.println("---------------------------"); Integer i1 = new Integer(197); Integer i2 = new Integer(197); System.out.println(i1 == i2);//false System.out.println(i1.equals(i2));//true System.out.println("---------------------------"); Integer i3 = 127; Integer i4 = 127; System.out.println(i3 == i4);//true System.out.println(i3.equals(i4));//true System.out.println("------------------------"); Integer i5 = 128; Integer i6 = 128; System.out.println(i5 == i6);//false System.out.println(i5.equals(i6));//true } }
-128到127是byte的取值範圍,如果在這個取值範圍內,自動裝箱就不會新建立物件,而是從常量池中獲取,如果超過了byte的取值範圍就會再新建立物件。
static final Integer cache[];
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 = 2這樣的方式,底層為什麼會呼叫valueOf方法還不太清楚,期望可以得到高人指點。