Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么输出字符串未传递到对象_Java_String_Object - Fatal编程技术网

Java 为什么输出字符串未传递到对象

Java 为什么输出字符串未传递到对象,java,string,object,Java,String,Object,为什么字符串传递而不是对象传递。来自 如果多个成员方法可访问且适用于 方法调用时,必须选择一个来提供 运行时方法分派的描述符。Java编程 语言使用的规则是选择最具体的方法 非正式的直觉是,如果可以传递第一个方法处理的任何调用,那么一个方法比另一个方法更具体 在没有编译时类型错误的情况下打开另一个。 当您不键入cast时,它将根据最具体的选项进行选择。 null可以是字符串类型的引用,也可以是对象类型的引用。 因此,如果两者都可用,那么将调用String方法 public class test

为什么字符串传递而不是对象传递。

来自

如果多个成员方法可访问且适用于 方法调用时,必须选择一个来提供 运行时方法分派的描述符。Java编程 语言使用的规则是选择最具体的方法

非正式的直觉是,如果可以传递第一个方法处理的任何调用,那么一个方法比另一个方法更具体 在没有编译时类型错误的情况下打开另一个。


当您不键入cast时,它将根据最具体的选项进行选择。
null
可以是
字符串类型的引用,也可以是
对象类型的引用。
因此,如果两者都可用,那么将调用String方法

public class test {
public static void main(String[] args) {
    magic(null);
}

public static void magic(String s) {
    System.out.println("String passed");
}

public static void magic(Object o) {
    System.out.println("object passed");
}
}
这将不再编译

它会说:不明确的方法调用。测试匹配中的
magic(String)
magic(Integer)
都可能是部分的重复,如果您添加(比如说)
void magic(Integer s)
,那么程序将不再编译,因为对于更具体的方法将是什么,它将是模棱两可的。
public class test {
    public static void main(String[] args) {
        magic(null);
    }

    public static void magic(Object o) {
        System.out.println("object passed");
    }

    public static void magic(String s) {
        System.out.println("String passed");
    }

    public static void magic(Integer s) {
        System.out.println("Integer passed");
    }
}