public class B1
{
     public void a (Object o)
     {
         System.out.println("Object!");
     }     public void a (String o)
     {
         System.out.println("String");
     }     static public void main(String []a)
     {
         B1 b=new B1();
         b.a(null);
     } 
} 为什么输出会是 String,希望解析!
还有String是Object的子类,那两个重载的函数应该怎样理解!还有JAVA里怎样使用 assert 关键字的?

解决方案 »

  1.   

    有人提出过这个bug,不过以下是sun的评价,大意就是说String比Object更匹配null
    Null can be converted to type String and type Object (JLS 5.1.4) so both
    methods are applicable (JLS 15.12.2.1).However, String is a subclass of Object, and so foo(String) is more specific
    than foo(Object) (JLS 15.12.2.2).  So the call is not ambiguous and resolves
    to foo(String) as required.
      

  2.   

    Ruby的nil也是一个class,是NilClass。
    我觉得Java在实现上,也是这样的。
    这样null作为NullClass的唯一实例。就会调用这个实例的toString方法。以上纯属猜测
      

  3.   

    关于assert,这篇文章蛮好的
    http://www.blogjava.net/loocky/archive/2006/04/13/40793.html
      

  4.   

    ykzhujiang(朱朱)http://olA.photo.qq.com/?file=04C0C77651B3869E639D71BE8E44BF401D6A4B9D564C45DD0D6C940A61481B5A
    '==========================================================================
    这个文章太长了!可不可以简明地介绍一下!