【发布时间】:2018-06-19 02:58:44
【问题描述】:
如果有add(int,long)和add(long,int)这样的两个方法,这样的调用add(10,10)会被认为是歧义的。
但是如果我们有这样的例子,为什么它仍然被认为是模棱两可的??
static void add(short num1, short num2) {
System.out.println("add(short, short)");
}
static void add(byte num1, long num2) {
System.out.println("add(byte, long)");
}
public static void main(String[] args) {
byte num1 = 10;
byte num2 = 10;
add(num1, num2);
}
我想知道编译器是如何确定它是歧义的?虽然(在我看来)不应该因为add(short, short) 需要两步类型提升,而add(byte, long) 需要三步类型提升.. 还是我有误解??
【问题讨论】:
-
为什么你认为它不是模棱两可?
-
我在问为什么会模棱两可?你能证明这一点吗?
-
应该调用哪个?为什么?
-
bytes可以是shorts -
所以你不知道它应该调用哪一个,但你希望编译器知道?
标签: java overloading type-promotion