程序如下:
public class Test 
{
public void myMethod(Object o) 

System.out.println("My Object"); 
}
 
public void myMethod(String s) 

System.out.println("My String"); 
} public static void main(String args[]) 

Test t = new Test(); 
t.myMethod(null); 
}
}
结果是“My String”.为什么会有这个结果?
如果将参数是String的方法注释掉,打印结果为“My Object”,这又是为什么?

解决方案 »

  1.   

    因为程序默认你t.myMethod(null)的null是string ,如果去掉那个方法么肯定就变成object型了啊.你要传进null的话你可以写个方法体是这样
    public void myMethod() 

    System.out.println("null"); 
    }
    这样你就可以不用给它值了!
      

  2.   

    楼主和楼上都太不厚道, 算了!这是方法重载的问题, 由编译器在编译时期进行方法选择, 一般会选择同类型或者最匹配的类型进行调用. 因为null可以匹配任何对象, 所以上面两个方法都可以匹配, 这时编译器就会选择更加特殊的(specific, 或者更加精确)那个, 在这里当然就是String了, Object是所有类的父类嘛.子类都比父类更加匹配null...如果你再加个
    public void myMethod(Integer i)
    {
    System.out.println("Integer");
    }
    方法, 那你的程序将不能编译通过, 因为编译器无法选择Integer还是String来进行匹配.最后, 请谨慎地使用重载机制, 一般情况下都请不要使用... 退一步讲, 如果你一定要使用, 那就千万不要编写具有相同参数个数的重载方法. 不然, 程序出现莫名其妙的问题, 就有得你检查和调
    试了.
      

  3.   

    哈哈....jk88811(jkzqw) 说的很精辟
      

  4.   

    jk88811(jkzqw) 说的很好,完全正确