Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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 - Fatal编程技术网

Java 为什么输出是;字符串";。意外输出

Java 为什么输出是;字符串";。意外输出,java,string,Java,String,我是java初学者,对上面程序的输出感到困惑。 请向我解释输出的原因。Java编译器选择将选择最特定的重载方法。它被称为早期绑定。这里,String扩展了Object类,因此它更具体。你可以参考 如果一个方法调用可以访问并适用于多个成员方法,则有必要选择一个成员方法来为运行时方法分派提供描述符。Java编程语言使用的规则是选择最具体的方法 早期绑定(在编译时绑定最特定的方法) 重载方法时,将选择最具体的方法。在您的情况下,选择的顺序是StringObject(因为null可以是任何引用类型) 在

我是java初学者,对上面程序的输出感到困惑。
请向我解释输出的原因。

Java编译器选择将选择最特定的重载方法。它被称为早期绑定。这里,
String扩展了Object
类,因此它更具体。你可以参考

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


早期绑定(在编译时绑定最特定的方法)

重载方法时,将选择最具体的方法。在您的情况下,选择的顺序是
String
Object
(因为null可以是任何引用类型)

在层次结构中,字符串比对象更具体。因此,选择了字符串。事实上,对象是所有java对象中最不特定的

这是同样的JLS

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

。。。。。[规则]


您使用的概念是重载,
Object
是java中所有类的超类。因此,当您提供任何特定实现(在本例中为其
字符串
)以及一般实现(在本例中为其
对象
)时,JVM默认使用特定实现。 如果您想试用,请替换
abc(空)
abc(123)


在这种情况下,输出将是“对象”,因为JVM找不到integer的任何特定实现,所以它使用广义实现。

这不是在运行时完成的,而是在编译时完成的time@ErwinBolwidt谢谢,我已经改正了。非常感谢,先生@苏雷什阿塔
 public class Test{

public static void abc(String s) {
    System.out.println("String");

}

public static void abc(Object s) {
    System.out.println("OBject");

}

 public static void main(String[] args) {
    // TODO Auto-generated method stub
    abc(null);

}}
Output-String