public class Confusing 
 {
     public Confusing(Object o) {
         System.out.println("Object");
     }
     public Confusing(double[] dArray) {
         System.out.println("double array");
     }
     public static void main(String args[]) {
         new Confusing((Object)null);
     }
 }
我想知道 为什么  会调用double[]  参数的饿构造函数!!谢谢

解决方案 »

  1.   

    把null换成别的 会不会还调用 double那个?  可能null强转成object后 是个double数组  呵呵 不太懂
      

  2.   

    嘿嘿!!写错了!!
    public static void main(String args[]) {
                 new Confusing(null);
             }

     是这样
      

  3.   

    1楼没睡醒吧..LZ运行过么?我在MyEclipse里运行结果是Object
      

  4.   

    我这边怎么是:
    public class Confusing {  public Confusing(Object o) {
        System.out.println("Object");
      }  public Confusing(double[] dArray) {
        System.out.println("double array");
      }  public static void main(String args[]) {
        new Confusing((Object) null); // Object
        new Confusing((double[]) null); // double[]
        new Confusing(null); // double[]
      }
    }其中第三个,如果加上其他对象类型参数的构造函数(比如String, char[]),会编译错误,提示有歧义
      

  5.   

    LZ请找一本《Effective java》看一看,里面有详细的解释!
      

  6.   

    我擦  确实没注意到入口方法,起床第一件事就是开csdn 然后……
      

  7.   

    告楼主!我试验会输出的是“Object”
    请检查你的编译器和环境吧……
    我的1.6
      

  8.   

    楼主有没有试过再多写一个int[] 参数的,会报冲突错误。
    如果你再写一个double参数的……
    呵呵,这个需要研究过Java深层原理的人来解答了。关注中……
      

  9.   

    关于重载方法,如果参数个数相同,会选择参数类型最接近范围最窄的那个,Object的范围比byte[]的范围宽
      

  10.   

    double[]是 Object类型。LS头像好有意思。
      

  11.   


    本人头像说明
    http://topic.csdn.net/u/20100513/11/dfac501f-af53-48ca-b2bd-3d5b77ede111.html