当前位置: 首页 > 知识库问答 >
问题:

为什么对象类不接受null[重复]

甘君之
2023-03-14

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

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);

}
}

这给出了输出Array。

但是如果代替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);

}

}

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

那么为什么上面的代码在对象o的情况下工作呢。

提前谢谢

共有3个答案

孙绍辉
2023-03-14

因为,对象不是数据类型,所以每当用户输入一些数据时,它都会决定其数据类型。例如,Object obj=null//语法错误

对象obj=4.0//这里的obj是双精度的,因为传递的值是4.0

对象对象对象//这里obj是字符串。

对象与javascript中的var相同。

夹谷宜民
2023-03-14

因为双[]更具体。

Double[]Object。因此,当您调用set(thom-dule-ray)时,会调用此版本。注意,null很好双[]

但在第二种情况下,没有更具体的方法。

赏育
2023-03-14

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

因为,nullStringObjectdouble[]的有效值,所以编译器必须决定调用哪个方法。

  • 对于对象和双对象,因为双对象比对象更具体(数组只不过是对象)。所以编译器将在这里选择更具体的类型-<代码>双[]

您可以通过JLS§15.12.2.5-选择最具体的方法

 类似资料:
  • 我试图使用Spring Data JDBC持久化一个包含嵌入式对象的对象。它不会被保存,因为它没有通过NULL检查。 我创建了一个外部类来持久化。 有什么方法可以保存一个空的/空的嵌入对象吗?

  • 我有一段类似这样的代码: 我的测试是: 上面的代码不应该抛出NPE吗? 当我将测试更改为: 然后我的代码正确地抛出了一个空指针异常。 我的测试第一版和第二版有什么区别? 在我的第一个版本中,我告诉mockA返回mockB。但是我也将mockB设置为null,所以当调用b.doSomething()时,我认为该方法应该抛出一个空指针,因为它试图调用null.doSomething()。 我知道我应该

  • 问题内容: 为什么在JavaScript中被视为? 正在检查 与…相同 ? 并且: 和之间有什么区别? 问题答案: (name is undefined) You: What is name? () JavaScript:* ?什么啊 我不知道你在说什么您以前从未提到过。您是否在(客户端)看到其他脚本语言? You: What is name? JavaScript: I don’t know.。

  • 我的脚本将,作为参数: 但当我将它作为分隔符传递时,它是空的 我知道在参数/参数解析中很特殊,但我以和引用的形式使用它。 为什么它不起作用?我使用的是Python 3.7.3 这是测试代码: 当我运行它作为它打印空。