gpt4 book ai didi

Java 重载 : Number, 数字;整数,双

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:40 24 4
gpt4 key购买 nike

这两天我有一个java考试,我想不出这道题的答案:

class ClassA {
public String foo(Integer x , int y) {
return "Integer, int";
}
public String foo(int x, Double y) {
return "int, Double";
}
public String foo(Number x, Number y) {
return "Number, Number";
}
public String foo(Object x, Object y) {
return "Object, Object";
}
public static void main(String... args) {
ClassA a = new ClassA();
System.out.print(a.foo(5, 1.2f) + " ");
System.out.println(a.foo(null, null));
}
}

输出是什么?

答案是:

Number, Number Number, Number

我知道 java 总是选择最指定的方法,这就是为什么 a.foo(null,null); 会调用 Number,Number 方法而不是Object,Object 方法。但是为什么 a.foo(5,1.2f); 也调用了 Number,Number 方法而不是 int,Double 方法?

但还有一件事可能会有所帮助:如果我在 1.2 之后删除 f,那么调用是:a.foo(5,1.2);我得到一个编译器错误,它无法在 Number,Numberint,Double 方法之间进行选择...

如果你们能向我解释一下,那将非常有帮助:)

最佳答案

1.2f 没有被 Double 包裹,而是被 Float 包裹。由于 Float 不是 Double 的子类(它们是 Number 的不同子类),可以使用的最具体的方法签名是 foo(数字,数字)

一旦你删除了 f,1.2 将默认被视为一个 double(原语,而不是包装类),它可以被自动装箱到一个 。然而,5 也可以自动装箱为 Integer,从而导致歧义。

关于Java 重载 : Number, 数字;整数,双,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11053564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com