重载原始变量

时间:2012-05-07 08:53:03

标签: java

代码是

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
    }
}

为什么它会给出错误,而应该选择print(float d1,float d)

PS: 在上面的代码中,如果我评论:

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

然后打印(float d1,float d)被调用...

1 个答案:

答案 0 :(得分:5)

print(2, 3.0f);

可以是print(int, float)print(float, double),因为隐式类型转换是在背景中完成的。 int可以转换为float。 Javac(或编译器)无法确定你的意思。

如果您想为自己选择,可以添加演员:

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

(请注意,第二次演员(float => float)不是必需的。)