Please correct me if I'm wrong. Is Boxing+Varargs is preferred over Boxing+Widening?
I found in a site that its the other way.
Please correct me if I'm wrong. Is Boxing+Varargs is preferred over Boxing+Widening?
I found in a site that its the other way.
当几个有资格在定义什么方法被称为JLS#15.2.2 :
第一阶段(§15.12.2.2)执行重载而不允许拳击或取消装箱转换,或使用可变元数的方法调用的。 如果在此阶段没有发现适用方法然后处理继续到第二阶段。
第二阶段(§15.12.2.3)执行重载解析,同时允许装箱和拆箱,但仍排除使用可变元数的方法调用的。 如果在此阶段没有发现适用方法然后处理继续到第三阶段。
第三阶段(§15.12.2.4)允许重载具有可变元数的方法,拳击,和取消装箱组合。
因此,在总结:拓宽>拳击与拆箱>可变参数
Boxing + Widening
优于Boxing + Varargs
。 我已经改变了@约翰的例子来说明这一点:
public static void main(String[] args) {
int i = 2;
doX(i);
}
static void doX(Object i) {
System.out.println("Object");
}
static void doX(Integer... i) {
System.out.println("Integer...");
}
版画
Object
拳击+加宽优于拳击+可变参数。 一个简单的测试将确认相同。
public static void main(String[] args) {
int i = 2;
doX(2);
}
static void doX(Object i){
System.out.println("object...");
}
static void doX(Integer... i){
System.out.println("int...");
}
打印:
object...
编辑:对不起,是我不好。 我已经改正的代码。 没有注意到我输入了“对象...”