2016-12-03 79 views
1

的基值在java中在打印時字符數組它給零指示字例外,但在整數數組的情況下,它打印空字符數組VS在Java int數組而打印陣列

public class Test { 
    char c[]; 
    int a[]; 
    //while printing c it gives null pointer exception 
    public static void main(String[] args) { 
     System.out.println(new Test().c); 
     // in case of integer it prints null 
     System.out.println(new Test().a); 
    } 
} 
+3

什麼問題 –

+0

'println'重載爲'char []',所以它的行爲有所不同。 – 4castle

+0

請詳細解釋。 –

回答

2

作爲4Castle建議,其原因是

System.out.println(...); 

不只是1層的方法,而是很多很多不同的方法採取不同的參數

enter image description here

這是Java稱爲方法重載

的源代碼的背後:

的println正在呼叫打印

打印正在呼叫寫入

如果write(..)正在使用一個char[]然後NPE正在發生的事情,因爲代碼試圖(等等)來得到被空引用

private void write(char buf[]) { 
     try { 
      synchronized (this) { 
       ensureOpen(); 
       textOut.write(buf); 
       textOut.flushBuffer(); 
       charOut.flushBuffer(); 
       if (autoFlush) { 
        for (int i = 0; i < buf.length; i++) 
         if (buf[i] == '\n') 
          out.flush(); 
       } 
      } 
     } 

在另一方面數組的長度,打印int[]將結束成主叫println(Object x)哪裏String.valueOf調用

public void println(Object x) { 
    String s = String.valueOf(x); 
    synchronized (this) { 
     print(s); 
     newLine(); 
    } 
} 

,正如你可以看到

public static String valueOf(Object obj) { 
     return (obj == null) ? "null" : obj.toString(); 
} 

valueOf(null)個回報 :)

1

至於建議,爲的println在你的問題行爲的原因,是不同的重載的System.out.println(...)方法越來越被稱爲

  • 在INT的情況下[]: - 公共無效的println(對象X)

  • 在炭[]的情況下: - 公共無效的println(字符X [])

不想從Jdk源代碼複製粘貼。

  1. 第一種方法首先調用將String.valueOf(X),這在 的情況下返回null。然後有一個print(s)方法調用,如果傳遞的參數爲null,則會打印null 。

  2. 第二種方法拋出NPE,空指針異常如果通過 參數爲空。