请帮我解释一下这段代码行为:
public class Main {
public static void var(Object... x) {
System.out.println("Object");
}
public static void var(Integer... x) {
System.out.println("Integer...");
}
public static void main(String... args) {
byte i = 0;
Integer i2 = 127;
var(i, i2);
}
}
上面的代码返回Object...
public class Main {
public static void var(Object... x) {
System.out.println("Object");
}
public static void var(int... x) {
System.out.println("int...");
}
public static void main(String... args) {
byte i = 0;
Integer i2 = 127;
var(i, i2);
}
}
java: reference to var is ambiguous, both method var(java.lang.Object...) in inheritanceTest.Main and method var(int...) in inheritanceTest.Main match
我有这些问题。
真的我很多时候都无法理解这部分jls。我的同事也不知道。
答案 0 :(得分:2)
第一次使用Object...
和Integer...
:
Integer...
无法匹配的原因是java在一次操作中不会同时执行自动扩展强制转换和自动装箱。这意味着只需将byte
转换为Integer
,只需将其传递给方法并希望byte
- > int
- > Integer
。因此,唯一的匹配是自动将byte
添加到Byte
并匹配Object...
。
使用Object...
和int...
的第二次尝试:
Java 可以为第一个参数执行从byte
到int
的自动扩展广告,并自动取消装箱Integer
到{{1所以int
匹配。但它也可以自动将int...
添加到byte
并离开Byte
,以匹配Integer
这不是优先事项。这是java可以在一个步骤中自动执行的操作 - 它可以 auto-box / unbox 或自动执行扩展转换。