拳击+可变参数优于拳击+加宽(Boxing+Varargs is preferred over Bo

2019-07-31 17:30发布

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.

Answer 1:

当几个有资格在定义什么方法被称为JLS#15.2.2 :

第一阶段(§15.12.2.2)执行重载而不允许拳击或取消装箱转换,或使用可变元数的方法调用的。 如果在此阶段没有发现适用方法然后处理继续到第二阶段。

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

第三阶段(§15.12.2.4)允许重载具有可变元数的方法,拳击,和取消装箱组合。

因此,在总结:拓宽>拳击与拆箱>可变参数



Answer 2:

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


Answer 3:

拳击+加宽优于拳击+可变参数。 一个简单的测试将确认相同。

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...

编辑:对不起,是我不好。 我已经改正的代码。 没有注意到我输入了“对象...”



文章来源: Boxing+Varargs is preferred over Boxing+Widening