为什么f(Double x)比f(double ... x)更好?

时间:2017-01-14 17:35:57

标签: java

今天我正在攻读Java考试,我遇到了这个问题:

  

A成为如下定义的类:

class A {
    public void f(Double x) { System.out.println("A.f(Double)"); }
    public void f(double... x) { System.out.println("A.f(double...)"); }
}
     

指令A a = new A(); a.f(1.0);产生的输出是什么?

答案似乎是A.f(Double),但我不明白为什么。有人可以给我一个正确的解释吗?

1 个答案:

答案 0 :(得分:25)

重载解析总是支持具有可变参数列表的函数具有明确数量的参数的函数,即使这意味着1.0是自动装箱的。

更详细一点,根据JLS 15.12.2选择具有此优先级的函数:

  1. 类型加宽
  2. 自动装箱
  3. 变量参数