簡體   English   中英

如何在java中調用重載方法

[英]How to call overload method in java

public class OverLoad {

    void method(Integer i){
        System.out.println("Integer "+i);
    }
    void method(int i){
        System.out.println("in "+i);
    }
    public static void main(String a[]){
        OverLoad m= new OverLoad();
        m.method(2); //it calls method(int i) why?    
    }
}

如果我調用m.method(3)它將調用int方法為什么? 如果我調用m.method((Integer)3)那么它將調用Integer方法。

默認情況下,它將進入原始數據類型

默認情況下,它將進入原始數據類型

是的,因為這是論證的確切類型。 文字2的類型是int ,而不是IntegerJLS 3.10.1 )。 它可以通過拳擊轉換( JLS 5.1.7 )轉換為Integer ,但只有在實際需要時才會發生。

根據JLS 15.12.2 ,Java中的重載分三個階段進行

第一階段(§15.12.2.2)執行重載解析而不允許裝箱或拆箱轉換,或使用變量arity方法調用。 如果在此階段沒有找到適用的方法,則處理繼續到第二階段。

所以m.method(2)匹配第一階段的method(int) ,因此不需要進入第二階段。

那是因為2 一個原始整數 - 不是Integer類型的對象。

只有在找不到完美匹配簽名(帶有int)時才會發生自動裝箱。

通過使用arguments (Integer)3調用,您可以強制編譯器將int 3自動裝箱到Integer對象中。

暫無
暫無

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

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