gpt4 book ai didi

java - 为什么对象类不采用 null

转载 作者:行者123 更新时间:2023-12-01 18:45:24 26 4
gpt4 key购买 nike

我知道在原始数据类型的情况下自动类型提升的概念。但是在引用数据类型的情况下,我有下面的代码,它可以完美地工作。

public class Test4 {

void set(Object o) {
System.out.println("Inside Object");
}

void set(double[] a) {
System.out.println("Array");
}
public static void main(String[] args) {
new Test4().set(null);

}
}

给出输出数组。

但是如果代替 Object o,如果我们有任何其他类,那么这将显示编译时错误该方法对于类型 Test4 不明确

下面的代码给出编译时错误

public class Test4 {

/*void set(Object o) {
System.out.println("Inside Object");
}*/

void set(String s) {
System.out.println("String");
}
void set(double[] a) {
System.out.println("Array");
}
public static void main(String[] args) {
new Test4().set(null);

}

}

据我所知,每个引用数据类型(类、接口(interface)和数组)的默认值为 null。

那么为什么上面的代码在 Object o 的情况下可以工作。

提前致谢

最佳答案

编译器总是选择具有更具体参数类型的方法,该方法可以与传递的参数相匹配,以防该参数可用于两个参数。

由于 nullStringObjectdouble[] 的有效值,因此编译器来决定调用哪个方法。

  • 如果是 Objectdouble[],因为 double[]Object 更具体(数组只不过是一个对象)。因此编译器将在这里选择更具体的类型 - double[]
  • 如果是 Stringdouble[],编译器无法决定哪一个是更具体的类型,因为数组和 String 类型之间没有任何关系(它们不属于同一继承层次结构)。因此它认为该调用不明确。

您可以通过JLS §15.12.2.5 - Choosing the Most Specific Method

关于java - 为什么对象类不采用 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931536/

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