Java 为什么调用带有字符串参数的方法而不是带有对象参数的方法

Java 为什么调用带有字符串参数的方法而不是带有对象参数的方法,java,overloading,Java,Overloading,问题:代码的o/p是字符串调用的,而不是对象调用的..为什么??空值也适用于对象 Java将始终尝试使用可用方法的最具体适用版本,请参见: 对象和字符串都可以将null作为有效值。因此,所有3个版本都适用,因此Java必须找到最具体的版本 由于对象是字符串的超类型,因此字符串版本比对象版本更具体。因此,如果只有这两种方法存在,将选择字符串版本 这三个方法中的每一对在使用null参数调用时本身都是不明确的。因为每个参数类型都是引用类型 以下是使用null调用您的一个特定方法的三种方法 class

问题:代码的o/p是字符串调用的,而不是对象调用的..为什么??空值也适用于对象

Java将始终尝试使用可用方法的最具体适用版本,请参见:

对象和字符串都可以将null作为有效值。因此,所有3个版本都适用,因此Java必须找到最具体的版本

由于对象是字符串的超类型,因此字符串版本比对象版本更具体。因此,如果只有这两种方法存在,将选择字符串版本

这三个方法中的每一对在使用null参数调用时本身都是不明确的。因为每个参数类型都是引用类型

以下是使用null调用您的一个特定方法的三种方法

class Jaguar 
{
void method(Object o)
{
    System.out.println("Object Called");
}
void method(String s)
{
    System.out.println("String Called");
}
public static void main(String[] args) 
{
    Jaguar j=new Jaguar();
    j.method(null);
}
}
如果您使用对象子类example Integer再添加一个方法,那么编译器将抛出不明确的方法错误,因为在这种情况下,编译器无法决定哪个方法可以称为string one还是Integer one


我希望这会有所帮助。

对象是可用的最高级别。但是如果一个子类可用,它将被调用。此外,所有内容都首先转换为字符串(如果可用),而不是对象。你大部分时间都得对对象进行强制转换。
doSomething( (Object) null);
doSomething( (String) null);