为什么使用自定义的类创建一维数组时要被实例化两次?  

2009-12-19 09:18:33|  分类: |字号 

 
 

问题:

Circle是自定义的类。   

    
  circles   [   i   ]   使用前需要被实例化,也就是数组成员完整的实例化是:   
  circles   =   new   Circle   [10];   
  For   (…)     
  circles   [   i   ]   =   new   Circle();   
    
  上面的第二次实例不能省略,在VS2005上面由于缺少了第二步的实例化,编译通过但是调试的时候提示引用空类型。   
    
  但是语言自带的类型比如   int   ,如果有这样的实例化:   
  circles   =   new   int[   10   ];   
  之后就可以直接引用数组成员了。   
    
  为什么会有这样的区别呢?

 

答案:

基本数据类型,定义数组时有默认值,例如int[]   a   =   new   int[10];   

这数组的元素默认值均为0。

而circle是个类   

  Circle[]   circle   =   new   Circle[4];   
  只是在栈上分配了空间,circle[i]并为引用到堆上的对象(因为还未实例化)