[英]Method overloading in java regarding arguments with int/long and String/object
對於以下程序,為什么要調用具有int和String參數的方法而不是long和Object?
想知道為什么編譯器選擇int代替long
參數,而選擇String
代替Object
參數。
注意:這是在采訪中問到的。
public class MethodOverloadingTest {
public static void add(int n, int m){
System.out.println("Int method");
System.out.println(n+m);
}
public static void add(long n, long m){
System.out.println("Long method");
System.out.println(n+m);
}
public static void method(String st){
System.out.println("from String method");
}
public static void method(Object obj){
System.out.println("from Object method");
}
/**
* @param args
*/
public static void main(String[] args) {
add(2,3);
method(null);
}
}
對於add(2,3)
方法,您要傳遞整數,這就是為什么要調用整數的原因。 對於method(null)
,選擇最具體的方法參數。 在這種情況下, String
比Object
更具體。 因此method(String st);
被叫。
該概念稱為“早期綁定”。 最具體的方法(基於參數)是在編譯時選擇的。
Object
是java中最具體的類,因為它是所有類的超類。
如果多個成員方法既可訪問又可應用於方法調用,則必須選擇一個成員方法來為運行時方法分派提供描述符。 Java編程語言使用選擇最具體方法的規則。
選擇方式在規則集中給出,此處指定
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5
這很簡單,因為Java默認將數字視為int,將字母視為字符串對象,而不是通用對象。
因此,當您傳遞add(2,3)時,它將參數作為普通int
調用add(long,long)將參數傳遞為; add(2.0,4.0)像這樣。 並用於調用函數method(object)
1.首先對您的字符串進行類型轉換以鍵入對象String str; str =(對象)“ Hello world”;
2.然后傳遞給方法(str);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.