一尘不染

为什么f(Double x)比f(double…x)更好的匹配?

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)但我不明白为什么。有人可以给我适当的解释吗?


阅读 341

收藏
2020-12-03

共1个答案

一尘不染

与具有可变参数列表的函数相比,重载解析始终偏向于使用具有明显数量的参数的函数,即使这意味着该1.0函数是自动装箱的。

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

  1. 类型加宽
  2. 自动装箱
  3. 可变参数
2020-12-03