System.out.println()中傳入null會發生什麼
阿新 • • 發佈:2018-12-13
之前做了思科大資料開發工程師的筆試題,其中有一道題目是判斷一段Java程式碼的輸出結果,最後實質上是判斷System.out.println()括號中如果傳入null會輸出什麼。大公司考的題目都很細很考驗功底,所以記錄下這個平時有些忽略的細節。在回顧當時的題目時,找到一個國外大學的教師寫的部落格講得很詳細:
主要的意思就是,System.out.println()括號中如果傳入null,不同形式的null最終的輸出也不同。如果是直接傳入null:
System.out.println(null);
會在編譯時報錯,即無法確定傳入的值是屬於字元陣列物件還是String物件,錯誤資訊如下:
reference to println is ambiguous, both method println(char[]) in java.io.PrintStream and method println(java.lang.String) in java.io.PrintStream match
也就是說,System.out.println()在輸出結果的時候括號內的引數有兩種,char[]和String(或Object)。一般必須顯式指定傳入的值所屬的物件類別。如果傳入Object或String物件:
Object o = null; String s = null; System.out.println(o); System.out.println(s);
輸出如下所示:
null null
所以如果傳入的null值是Object或者String物件的形式,最終的輸出就是null。但如果傳入的是字元陣列char[]:
char[] a = null;
System.out.println(a);
最終會丟擲空指標異常,如下所示:
Exception in thread "main" java.lang.NullPointerException at java.io.Writer.write(Writer.java:127) at java.io.PrintStream.write(PrintStream.java:470) at java.io.PrintStream.print(PrintStream.java:620) at java.io.PrintStream.println(PrintStream.java:759) ...
因為陣列的引用指向null,所以訪問該字元陣列物件時就會找不到實際的char[]例項,就不會有正常輸出。