Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_Oop_Object_Core - Fatal编程技术网

Java 使用字符串和对象进行检查

Java 使用字符串和对象进行检查,java,string,oop,object,core,Java,String,Oop,Object,Core,代码如下: public class OverloadingByObject { public static void main(String[] args) { // TODO Auto-generated method stub Object object = null; new OverloadingByObject().SayHi(null); new OverloadingByObject().SayHi(obje

代码如下:

public class OverloadingByObject {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Object object = null;
        new OverloadingByObject().SayHi(null);
        new OverloadingByObject().SayHi(object);
    }

    public void SayHi(String str) {

        System.out.println("String called");
    }

    public void SayHi(Object obj) {

        System.out.println("Object called");
    }
}

当我传递null时,它应该调用Object的方法。它调用字符串方法的原因是什么?

null
可以分配给任何引用类型。在决定调用哪个重载版本的方法时,将选择具有最特定参数的方法<代码>字符串比
对象
更具体(因为
字符串
对象
的一个子类)。因此,为
null
参数调用
SayHi(String str)

因此,您确信它更喜欢第一个子类metod。@Krishna它更喜欢具有最特定参数类型的方法。但是,如果您添加另一个方法,例如
SayHi(Integer i)
,调用
SayHi(null)
将无法通过编译,因为整数和字符串都不比另一个更为具体。运行此示例时,我会得到两次“Object called”。@user987339奇怪,我得到的是
字符串调用对象
,这是预期的行为。您可以将其粘贴到ideone上吗?