-2
     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);
   }
}

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

    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);
    }
}

此代码结果为“字符串版本”</p>

实际上我无法理解第二段代码的结果。为什么两段代码的结果不同

4

1 回答 1

2

在第一种情况下,

null是所有其他引用类型的子类型。因此,编译器在决定调用哪个方法时发现模棱两可。

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

于 2013-08-10T13:24:53.637 回答