java - java重载方法的搜索顺序

标签 java overloading autoboxing

我有以下方法:

static void f(double x)
{
    System.out.println("f(double)");
}

static void f(Double xObj)
{
    System.out.println("f(Double)");
}

static void f(double... s)
{
    System.out.println("f(double...)");
}

public static void main(String[] args)
{
    double x1 = 8.5;
    Double xO1 = 5.25;
    f(x1);
    f(xO1);
}

输出:

f(double)

f(Double)

搜索重载方法的规则如下:

  1. 搜索重载方法,不包括带自动(取消)装箱的方法和带省略号的方法。
  2. 如果找不到方法,请使用包含自动(取消)装箱的方法再次搜索。
  3. 如果没有找到方法,请使用省略号包含方法再次搜索。

当使用原始参数调用方法f时,此规则适用,但当使用自动装箱参数调用时,此规则不适用。

谁能解释一下这个规则是否正确?正确的是什么?

感谢您的提前:)

最佳答案

Java 使用 this rule 选择适合参数的最具体方法

“当使用原始参数调用方法 f 时,此规则适用,但当使用自动装箱参数调用时,此规则不适用。”

当您删除方法 f(Double) 时,f(xO1) 将调用 f(double),因为这是 ,以及适合参数最具体方法。

作为引用,您可以查看 Java Language Specification

关于java - java重载方法的搜索顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676060/

相关文章:

c++ - VS 2010 : 2 overloads have similar conversions

java - 整数值比较

java - 装箱到对象类型以避免编译失败

java - 当返回值为int时通过条件运算符返回null

java - URL获取参数的问题

java - 如何在有状态操作的情况下定义幂等行为?

java - 通过屏幕触摸速度调节游戏速度

Java Applet - For 循环递减组件堆栈

C++ 重载时的编译错误

c++ - 什么时候删除模板实例比删除非模板重载更可取?