无法理解这段代码的输出?

时间:2013-08-10 13:17:00

标签: java string overloading stringbuffer

     public class Test {

   public void method(String param)
   {
       System.out.println("String version");
   }

   public void method(StringBuffer param)
   {
       System.out.println("String Buffer");
   }

   public static void main(String args[])
   {
       Test test=new Test();
       test.method(null);
   }
}

此代码结果是编译错误,说“对方法的引用不明确”

    public class Test
{
    public void method1(Object param)
    {
        System.out.println("Object Version ");
    }

    public void method1(String param)
    {
        System.out.println("String Version ");
    }

    public static void main(String[] args)
    {
        Test test=new Test();
        test.method1(null);
    }
}

此代码结果为“String Version”

其实我无法理解第二段代码的结果。为什么两段代码都没有相同的结果

1 个答案:

答案 0 :(得分:2)

在第一种情况下,

null是每个其他引用类型的子类型。 因此,编译器在决定调用哪个方法时会发现歧义。

在第二种情况下,它找到null更具体的对象,恰好是String。因此,它调用method1并打印String Version