群里有一個小伙伴發了一段和下面差不多的代碼啊,問了一個問題,代碼如下:
public static void main(String[] args) { doem01 doem01 = new doem01(); Integer name = doem01.name(); System.out.println(name); } public Integer name() { return null; }
這段代碼毫無疑問,打出來的是null 群友問,為什么name中的return不報錯啊,null不是string的默認值嘛然而我定義的是Integer 。這個是群友發的
這時我也不知道啊,就百度尋找答案,萬能的度娘告訴我:
值類型 : 默認值為0;
引用類型 : 默認值為null;
下面的代碼中,我們將Interger改成int類型:
public static void main(String[] args) { doem01 doem01 = new doem01(); int name = doem01.name(); System.out.println(name); } public Integer name() { return null; }
代碼編譯時不會報錯,但運行的時候會報一個空指針的錯誤,為什么呢?因為Integer是int的封裝類,編譯器能夠識別,但是它所調用的方法又是另一個,所以運行時
找不到那個方法所以報了一個空指針,代碼如下:
public static void main(String[] args) { doem01 doem01 = new doem01(); int name = doem01.name(); Integer name1 = doem01.name1(); System.out.println(name); System.out.println(name1); } private int name() { // TODO Auto-generated method stub return 0; } public Integer name1() { return null; }
如代碼int 聲明的調用的是 int name()這個方法 Integer聲明的調用的是Integer name1()這個方法。在聲明變量初始化時也是相同的道理,int聲明的變量只能為int類型
而Integer出來int類型外,還可以定義為null。如下:
Integer a1 = null; int a2 =null; //這行會報錯
int a3 =1; int a4 = (Integer) null;
其他的基本數據類型也是如此。
個人學習,內容拙劣見諒