拳击+ Varargs优于拳击+加宽

时间:2012-09-20 10:10:00

标签: java overloading

如果我错了,请纠正我。 Boxing + Varargs比Boxing + Widening更受欢迎吗?

我在site找到了另一种方式。

3 个答案:

答案 0 :(得分:2)

JLS #15.2.2

中定义了几个可以符合条件的方法
  

第一阶段(§15.12.2.2)执行重载解析而不允许装箱或拆箱转换,或使用变量arity方法调用。如果在此阶段没有找到适用的方法,则处理继续到第二阶段。

     

第二阶段(§15.12.2.3)在允许装箱和拆箱的同时执行重载解析,但仍然排除使用变量arity方法调用。如果在此阶段没有找到适用的方法,则处理继续到第三阶段。

     

第三阶段(§15.12.2.4)允许重载与变量arity方法,装箱和拆箱相结合。

总结:拓宽>拳击和拆箱>可变参数

答案 1 :(得分:0)

拳击+加宽比Boxing + Varargs更受欢迎。一个简单的测试就会证实这一点。

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...
编辑:抱歉,我的不好。我已经纠正了代码。没注意到我输入了“对象......”

答案 2 :(得分:0)

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