【发布时间】:2014-04-11 18:53:38
【问题描述】:
public class Primitive {
void m(Number b, Number ... a) {} // widening, autoboxing->widening->varargs
void m(byte b, Number ... a) {} // unboxing, autoboxing->widening->varargs
public static void main(String[] args) {
Byte b = 12;
Primitive obj = new Primitive();
obj.m(b, 23);
}
}
我已经搜索了,发现拉宽优先级高于拆箱,所以在上面的方法调用中,应该调用第一个方法,因为第二个参数对于两者都是相同的。但这不会发生。能解释一下吗?
【问题讨论】:
-
它为我编译 - 你使用的是哪个编译器? (哪个版本?)
-
这些优先级在独立的步骤中发生。首先是直接,然后是加宽,然后是拆箱。
-
@Sotirious Delimanolis 你能详细说明你的答案吗
-
这无法在 IntelliJ 中编译,但可以在
javac中正常工作。 JDK 1.8 版 -
无法在 JDK 7 too 上编译。似乎是 Java 8 中已修复的错误。
标签: java overloading wrapper primitive jdk1.6