当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么f(Doublex)比f(doublex)更好?》经验,为你挑选了1个好方法。

今天我正在攻读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> Bathsheba..:

重载决策总是倾向于在具有可变参数列表的函数上具有显式数量的参数的函数,即使这意味着它1.0是自动装箱的.

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

    类型加宽

    自动装箱

    变量参数


[C♯中的过载分辨率是NP-hard:您可以将任何3-SAT问题编码为过载解决问题并让编译器解决它.](https://blogs.msdn.microsoft.com/ericlippert/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five /)你碰巧知道Java的重载分辨率是多么"难"吗?
(C++中的重载分辨率更加复杂;-))
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有