Java 重载 - 长和浮动
我试图理解java重载规则。一切似乎都很好,除了以下,
public static void main(String[] args) {
long aLong = 123L;
foo(aLong);
}
private static void foo(double aDouble) {
System.out.println("Foo aDouble");
}
private static void foo(Long aWrapperLong) {
System.out.println("Foo Wrapper Long");
}
private static void foo(int anInt) {
System.out.println("Foo Int");
}
private static void foo(float aFloat) {
System.out.println("Foo Float");
}
为什么调用解析为 。我从JLS了解到以下内容,foo(float aFloat)
此步骤使用方法的名称和参数表达式的类型来查找既可访问又适用的方法 可能有多个这样的方法,在这种情况下,将选择最具体的方法。
我在这里故意使用了 Wrapper Long,而不是原始的 long。原始长为64位大小不会最终进入32位浮点数。foo(double aDouble)
foo(float aFloat)
为什么Java隐式(不强制转换)将“long”转换为“float”这个问题进一步澄清了这个问题的答案。