2012-12-18 68 views
-2

可能重複:
Java method dispatch with null argumentJava:重載方法,方法(空)會發生什麼?

爲什麼這會打印 「一個(字符串)」?

public class Test{ 
    public static void main(String[] args){ 
     a(null); 
    } 
    public static void a(Object x){ 
     System.out.println("a(Object)"); 
    } 
    public static void a(String x){ 
     System.out.println("a(String)"); 
    } 
    public static void a(int x){ 
     System.out.println("a(int)"); 
    } 
    public static void a(){ 
     System.out.println("a()"); 
    } 
} 

Java版本:

java version "1.7.0_04-ea" 
Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b228) 
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b12, mixed mode) 
+2

最特殊的一個更多的驚喜,與嘗試Integer和String參數。 –

+0

編譯錯誤:對a的引用是不明確的,測試中的方法a(String)和方法a(整數) – wuntee

回答

2

因爲規則是選擇最具體的方法和字符串繼承自Object。

From the specification :

如果適用性測試 三個階段之一期間已被確定了幾個可應用的方法,那麼最特定的一個是 選擇

1

在重載方法編譯器調用的情況下該方法用最具體的論點。由於java.lang.String更多特定類java.lang.Object編譯器調用的方法以字符串作爲參數。

Java language Specification:

如果適用性測試 三個階段中的一個期間已經確定了幾個適用的方法,則 選擇