程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 為什麼輸出是String而不是Object

為什麼輸出是String而不是Object

編輯:C++入門知識

前邊說了我准備寫一下關於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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved