代码是
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)被调用...
答案 0 :(得分:5)
print(2, 3.0f);
可以是print(int, float)
和print(float, double)
,因为隐式类型转换是在背景中完成的。 int
可以转换为float
。 Javac(或编译器)无法确定你的意思。
如果您想为自己选择,可以添加演员:
print((float) 2, (float) 3.0f);
(请注意,第二次演员(float => float)不是必需的。)