前邊說了我准備寫一下關於java提高的專欄,要怎麼提高呢,我覺得要想提高還得從問題入手,我想先把從國外網站上別人提問的問題拿到這裡,最後再做一下總結和大家相互探討一下。。 繼前邊我翻譯一道很不錯的字符分割題和數組中的跳躍問題之後,今天我有看到一個比較好的問題,如題目所示。。
下面來看一下問題吧,先上代碼:
public class test { public static void main(String[] args) { magic(null); } public static void magic(String s) { System.out.println(String passed); } public static void magic(Object o) { System.out.println(object passed); } }
代碼輸出是為:
String Passed
但是這是為什麼呢,一開始我也很難理解,我感覺編譯都會報錯。
下面先說一下null吧,Java中,null是一個關鍵字,用來標識一個不確定的對象。因此可以將null賦給引用類型變量,但不可以將null賦給基本類型變量。
比如:int a = null;是錯誤的。Ojbect o = null是正確的,null本身不是對象,也不是Objcet的實例。
null作為一個不確定的對象,按理來說兩個方法都可以匹配,但是java中有一個規則:優先匹配具體特殊的。
看以下代碼:
public class test { public static void main(String[] args) { magic(null); } public static void magic(Object o) { System.out.println(object passed); } public static void magic(String s) { System.out.println(String passed); } public static void magic(Integer s) { System.out.println(Integer passed); } }
結果會報錯,錯誤如下:
The method magic(Object) is ambiguous for the type test(就是Integer和String相近,無法選擇)。
歡迎加我的微博, 我會在微博實時更新文章,交流群:199326422