簡體   English   中英

為什么輸出String傳遞的不是對象

[英]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");
}
}

為什么字符串傳遞打印不通過對象。

來自JLS

如果多個成員方法都可訪問並適用於方法調用,則必須選擇一個為運行時方法調度提供描述符。 Java編程語言使用選擇最具體方法的規則。

非正式的直覺是,如果第一個方法處理的任何調用都可以傳遞給另一個沒有編譯時類型錯誤的調用,那么一個方法比另一個方法更具體。

如果不鍵入強制轉換,則會根據最具體的選擇進行選擇。 null可以是String類型或Object類型的引用。 因此,如果兩者都可用,則將調用String方法。

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");
    }
}

這將不再編譯,

它會說:模糊的方法調用。 測試匹配中的magic(String)magic(Integer)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM