2012-05-07 69 views
1

代碼是超載原始變量

public class TestOverload { 

    public static void print(Float f, double d) { 
     System.out.println("Float,double"); 
    } 

    public static void print(float f, double d) { 
     System.out.println("float,double"); 
    } 

    public static void print(int f, double d) { 
     System.out.println("int,double"); 
    } 
// public static void print(int f, float d) { 
//  System.out.println("int,float"); 
// } 

    public static void print(double d1, double d) { 
     System.out.println("double,double"); 
    } 

    public static void print(float d1, float d) { 
     System.out.println("float,float"); 
    } 

    public static void main(String[] args) { 
     TestOverload.print(2, 3.0); 

     TestOverload.print(2, 3.0f);//Compiler error:The method print(float, double) is ambiguous for the type TestOverload 
    } 
} 

爲什麼它被給錯誤,而是應該選擇打印(浮點D1,浮子d)

PS: 在上面的代碼中,如果我評論:

// public static void print(int f, double d) { 
//  System.out.println("int,double"); 
// } 

然後打印(浮點D1,浮子d)被稱爲...

回答

5
print(2, 3.0f); 

既可以是print(int, float)也可以是print(float, double),因爲隱式類型轉換是在背景中完成的。 int可以轉換爲float。 Javac(或編譯器)無法確定你的意思。

如果要選擇適合你的自我,你可以添加石膏:

print((float) 2, (float) 3.0f); 

(注意,第二投(浮=>浮動)是沒有必要的。)

+2

我想「 (float)3.0f「是多餘的,3.0f是一個沒有歧義的浮點數 – Jerome

+0

@Jerome:正確! – dacwe

+0

我試過@ jain007的代碼,我不能得到他的錯誤。我得到'int,float'打印,所以你一定是對的。但爲什麼?它依賴於JAVA版本嗎? – sp00m