前邊說了我準備寫一下關於java提高的專欄,要怎麼提高呢,我覺得要想提高還得從問題入手,我想先把從國外網站上別人提問的問題拿到這裏,最後再做一下總結和大家相互探討一下。。 繼前邊我翻譯一道很不錯的字符分割題和數組中的跳躍問題之後,今天我有看到一個比較好的問題,如題目所示。。
原文鏈接:http://stackoverflow.com/questions/23563212/why-output-string-passed-not-object
下面來看一下問題吧,先上代碼:
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賦給基本類型變量。
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