我有以下方法:
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)
搜索重载方法的规则如下:
- 搜索重载方法,不包括带自动(取消)装箱的方法和带省略号的方法。
- 如果找不到方法,请使用包含自动(取消)装箱的方法再次搜索。
- 如果没有找到方法,请使用省略号包含方法再次搜索。
当使用原始参数调用方法f
时,此规则适用,但当使用自动装箱参数调用时,此规则不适用。
谁能解释一下这个规则是否正确?正确的是什么?
感谢您的提前:)
最佳答案
Java 使用 this rule 选择适合参数的最具体方法
“当使用原始参数调用方法 f 时,此规则适用,但当使用自动装箱参数调用时,此规则不适用。”
当您删除方法 f(Double)
时,f(xO1)
将调用 f(double)
,因为这是 仅,以及适合参数的最具体方法。
作为引用,您可以查看 Java Language Specification
关于java - java重载方法的搜索顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22676060/