我将源代码稍作修改,将
a[i] = new Integer(pRand(500));
换成了
a[i] = new Integer(i);

去除了源代码中的一些方法;以便突出显示问题的所在。
===========================
还望高手点拨!谢谢了  ^_^

解决方案 »

  1.   

    Integer[] a = new Integer[20];
    就已经对数组进行初始化了,数组里的每个元素的值都为null。
    int[] a=new int[3];
    数组里的每个元素都是0;
      

  2.   

    a是一个数组对象,已经生成实例了:a = new Integer[20];
    其元素是Integer对象的引用,按照java规范,其初值为 null,
    即不指向任何对象。
      

  3.   

    你屏蔽掉
    a[i] = new Integer(i);
    仍然能执行的原因是下面的这句语句
    prt("a[" + i + "] = " + a[i]);
    它会把a[i]转换成字符串,然后想加.
    由于a[i]=null,而null这个特殊的东西转换成的字符串也是"null",所以你的程序的输出必然是
    a[0] = null
    a[1] = null
    a[2] = null
    ...
    ,当然你把prt语句中的a[i]换成null,程序一样的执行结果.但是这并不是说你的数组就初始化结束了,这个时候数组仍然没有被初始化,他的每个值都是null,即不可用的.这个时候调用a[i].任何方法都会出异常.
    比如你把prt这句该为
    prt("a[" + i + "] = " + a[i].toString());还有想看看效果,可以把上句该为
    prt("a[" + i + "] = " + new Object());
    他输出的是Object.toString()转换出来的地址.
      

  4.   

    所以,你上面说的
    只有在「生成新的Integer 物件以初始化reference」之後,初始化動作才算完成:是正确的.
    只有这样才能使用a[i],否则可能就只能象你prt 这样的程序可以执行,其他的恐怕还会出错.能运行的原因当然是因为那个null了.而不是说a[i]是可用的.