Java Null是引用类型,它是字符串引用还是对象引用?

Java Null是引用类型,它是字符串引用还是对象引用?,java,oop,object,Java,Oop,Object,null是一个引用,它只属于null类型,即null不是对象类型。 但是,当我运行下面的代码片段时,当我将null传递给methodmethod(null)时,我感到惊讶它调用方法(字符串s)而不是方法(对象o) 如果null本身是由Java定义的类型,而不是对象类型,那么为什么它调用方法(字符串s)而不是方法(对象o) 编辑 我又增加了一个方法: public static void method(Integer s) { System.out.println("String impl

null
是一个引用,它只属于
null
类型,即
null
不是对象类型。 但是,当我运行下面的代码片段时,当我将null传递给method
method(null)时,我感到惊讶它调用
方法(字符串s)
而不是
方法(对象o)

如果
null
本身是由Java定义的类型,而不是对象类型,那么为什么它调用
方法(字符串s)
而不是
方法(对象o)


编辑

我又增加了一个方法:

public static void method(Integer s) {
   System.out.println("String impl11");
}
现在编译器给出了错误
,类型测试的方法(对象)不明确

Integer a = null;

如果它是合法的,那么为什么我会看到编译时异常?

null
可分配给任何引用类型。当涉及到方法重载时,编译器总是倾向于使用更具体的参数类型的方法。因此,使用
字符串
参数的方法优于使用
对象
参数的方法,因为
字符串
对象
的子类


另一方面,如果在具有不相关参数类型的方法之间进行选择,例如
method(String s)
method(Integer i)
,则代码不会通过编译,因为没有一个选项优先于其他选项。

另请参见@ThomasStets,我不认为它是重复的qustion@Priya它是。阅读这个问题,它问的问题完全相同,除了方法参数具有不同的类型。基本上是相同的问题:重载方法,用空参数调用,为什么它调用这个而不是那个。答案也是一样的。我已经编辑了我的qustion@Priya我已经编辑了答案以解决您的编辑问题。意思是
字符串
整数
。。。。。是对象类的子类这就是为什么编译器混淆了调用哪个方法,对吗?@Priya String既不是Integer的子类,也不是Integer的子类或字符串。因此,编译器在这两者之间没有偏好。谢谢你回答我的等式。
Integer a = null;