[英]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
,而不是Integer
( JLS 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.