我有这段代码。
class NumberMachine {
public static void main(String [] args) {
Integer wi1 = new Integer("420");
int i = 101;
Integer wi2 = i*420/101;
if(wi1 == wi2)
System.out.print(" ==");
if(wi1.equals(wi2))
System.out.print(" equal");
float f = 1.23f;
new NumberMachine().printIt(f);
}
void printIt(Float f) {
System.out.println(" Float");
}
void printIt(double d) {
System.out.println(" double");
}
}
为什么结果是“等于双倍”但没有“等于浮动”?
答案 0 :(得分:11)
要确定应调用哪个方法,编译器将按照JLS #5.3和JLS #15.12.2中的详细说明执行以下列表:
printIt(double)
在这里工作 printIt(Float)
printIt(double)
答案 1 :(得分:2)
因为widening
(浮动到双倍)击败boxing
答案 2 :(得分:0)
printIt(Float f)接受Float对象,但printIt(double d)接受基本类型double。
因此,第二个printIt函数被调用,浮动转换为double。
请参阅http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Float.html
您可以像这样调用第一个函数:
Float f = new Float(5.0);
printIt(f);