今天,我正在为即将参加的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一个定义如下的类:
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 a = new A(); a.f(1.0);
答案似乎是,A.f(Double)但我不明白为什么。有人可以给我适当的解释吗?
A.f(Double)
与具有可变参数列表的函数相比,重载解析始终偏向于使用具有明显数量的参数的函数,即使这意味着该1.0函数是自动装箱的。
1.0
更详细地说,根据JLS 15.12.2选择具有此优先级的函数: