null会优先转换为什么类型 
比如 :void asd(String){...}
       void asd(Object){...}
 在程序中调用asd(null);就会直接调用第一个 ,那么 null对于所有其他类型的转换优先级是怎么的,高手请指点 谢谢!

解决方案 »

  1.   

    精确类型。
    比如这个例子中
    void asd(String){...} 
          void asd(Object){...} 
    String是Object的子类,是更为具体化的类,调用方法时,null优先匹配String
      

  2.   

    void asd(String), 找子类的String,如果再加个象void asd(Boolean)的话,编译都出错,因为Boolean跟String是同个level,它就不知道调用哪个function了.
      

  3.   

    六楼说得对。会调用asd(String)。补充一点,其实null也可以做类型转换。
    例如:
    asd((Object)null);
    这样可以强制调用asd(Object)。而且就算出现六楼说的情况也不会出错。
      

  4.   

        null其实是一个特殊的Object,但是他也是继承了Object的类型。
        对于asd(Object)和asd(String),当null的对象被调用的时候,此时Java虚拟机去寻找方法的方式,是先找继承最深的子类,然后依次往上找到父类。首先找到的是asd(String),这时,虚拟机认为这个String类型是为空,这时很明显他调用的方法当然是asd(String).
        接下来我们可以做个测试,假设有一个Father类,他有一个Child子类,这时我们就有三个重载方法:
        asd(Object)
        asd(Father)
        asd(Child)
        这时我们调用asd(null),通过Debug或者输出语句我们可以看到,Java是调用了asd(Child)。
        这个是Java访问重载方法的一种机制。
      

  5.   

    null可以类型转化 那么还有什么意义啊 
      

  6.   

    void asd(String)..会匹配这个..  重载的时候会去匹配最相近的类型的
    比如说.你有
    void f(float a)
    void f(double a)
    调用的时候你f(1)  他会去执行float的那个版本而不是double
      

  7.   


    像short,int,long,char倒好办。
    对字符串就近原则就不是很清楚
    望高手解答一下