【发布时间】:2019-10-22 07:54:50
【问题描述】:
由于类型提升,当有多个可接受的方法时,决定执行哪个方法的因素是什么?
这里是示例代码
public class Demo {
public static void main(String[] args) {
byte a = 100;
long b = 10000;
test(a, b);
}
public static void test(long a, double b) {
System.out.println("Method 2");
}
public static void test(int a, float b) {
System.out.println("Method 1");
}
}
输出是:Method 1 书面但Method 2 如果我注释掉test(int a, float b)
这是为什么呢?它是否尝试进行最少的类型提升?它是否试图推广论点 1,然后是论点 2?是否基于某种优先级?
我看过这个问题:How method-overloading and primitive types works?,其中包含以下语句:
- 如果确定了不止一种方法,请选择最具体的一种。
我想了解更多关于如何从所有可能的方法中选择最终要执行的方法的细节。我知道会发生类型提升,但是如果类型提升后有多个选项,编译器如何确定最终方法?换句话说,从上面的陈述来看,什么是更具体?
【问题讨论】:
-
抱歉,完整的规则集太复杂,无法在此处合理地转录,但您可以在语言规范中查看它们:docs.oracle.com/javase/specs/jls/se11/html/…
标签: java overloading type-promotion