为什么f(Double x)比f(double … x)更好匹配?
今天我正在攻读Java考试,我遇到了这个问题:
设
A
是一个定义如下的类:class A { public void f(Double x) { System.out.println("Af(Double)"); } public void f(double... x) { System.out.println("Af(double...)"); } }
指令
A a = new A(); af(1.0);
产生的输出是多少A a = new A(); af(1.0);
A a = new A(); af(1.0);
?
答案似乎是Af(Double)
但我不明白为什么。 有人可以给我一个正确的解释吗?
重载决策总是倾向于在具有可变参数列表的函数上具有显式数量的参数的函数,即使这意味着1.0
是自动装箱的。
更详细一点,根据JLS 15.12.2选择具有此优先级的函数:
- 类型加宽
- 自动装箱
- 变量参数