Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么f(Double x)比f(Double…x)更匹配?_Java - Fatal编程技术网

Java 为什么f(Double x)比f(Double…x)更匹配?

Java 为什么f(Double x)比f(Double…x)更匹配?,java,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=newa()产生的输出是什么;a、 f(1.0) 答案似乎是A.f(双倍),但我不明白为什么。有人能给我一

今天我在准备即将到来的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=newa()产生的输出是什么;a、 f(1.0)


答案似乎是A.f(双倍)
,但我不明白为什么。有人能给我一个恰当的解释吗?

重载解析总是倾向于使用显式参数数的函数,而不是使用可变参数列表的函数,即使这意味着
1.0
是自动装箱的

更详细地说,根据以下条件选择具有此优先级的函数:

  • 类型加宽
  • 自动装箱
  • 可变参数

  • 是的,这在某些情况下是非常丑陋的。在当前的情况下,只有<代码> f(新的双[]{ 1 })< /C> >似乎有效。(C++中的重载解析更复杂;-)你是否知道“硬”java的过载解决方案是什么?@ J J rgWMITAGTA:我发现有趣的是语言编写者拒绝包括基于返回类型的简单形式的重载,因为这将是“太难了”,但他们为参数重载加入了NP难解析规则。我不介意重载被标记为“主”和“次”,只有一个“主”“重载每个参数签名。实现可以分为两个步骤,选择最佳参数签名,然后选择具有该签名的最佳重载(如果没有更好的选择,则使用主参数)。生成的输出是您的团队领导说的“这是可怕的代码。找到一种编写方法,而不意味着人们必须完全了解Java规范。”