2014-04-01 51 views
0

我想知道編譯器如何讀取此代碼。爲什麼在將一個Integer變量賦值爲null的int變量賦值給一個int變量後會得到一個NPE?

public class obj { 
    public static void main(String[] args) { 
     Integer obj = null; //line4 
     int x = obj; //line 5 
     System.out.println(x); //line6 
    } 
} 

我的理解是,5號線可以做自動拆箱,這意味着它轉換Integer類型原始int

但我不打電話x上的任何方法,只是打印。爲什麼它給我一個NullPointerException

+0

。 http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html –

+0

不能將'null'賦值給'int'類型的變量 –

回答

0

Java有一些東西叫做autoboxing其中Integer對象自動轉換爲int primative。

+0

所以它只是將對象轉換爲原語,那麼爲什麼我們要例外,如果我們不打電話的任何方法 – user1742919

3

自動裝箱這裏意味着

int x = obj; 

居然是:

int x = obj.intValue(); 

,因此NullPointerException異常,如obj爲null。

+0

Thxs..sorry for naive question..i在我的採訪中犯了錯誤.. – user1742919

0

只看自動裝箱和拆箱閱讀了字節碼

javap -c com.interviews.practise.obj 
+0

是thxs很多新的想法.. – user1742919

相關問題