但我能证明对象数据在new Object[]时没有分配内存:
class A
{
   protected void finalize()
   { System.out.println("回收");
   }
}
class B
{
  public static  void main(String args[])
  {
     A[] array = A[1];
     A[0]= null;
     System.gc();  //等了好久没有回收内存,说明没有分配出来。如果A[0] new A();立马回收
     while(true);
  }
}
同样是数组类,难道基本类型数组就在new int[1]分配了空间吗?

解决方案 »

  1.   

    A[] array 这个分配了一个引用,指向数组A[] array = A[1];  这个分配了长度为1个A的引用数组,然后赋值给array这个指向数组的引用,但此时数组并没有分配空间。A[0] = null 这个也没有分配空间。A[0] = new A(); 此时分配了一个A的对象,并且赋值给了A[0];
      

  2.   

    注意,如果是基本数据类型,则new[] 就会分配空间了。比如int[] ids = new int[10]. 因为基本类型不是对象。
     
      

  3.   

    简单,通俗,言简意赅,深入浅出的理解:
    看关键字new,new就是分配内存空间的,建立对象的,只要有new就分配内存了,若之前没用使用new分配对象就的话,那就是引用
      

  4.   

    常规类型似乎没必要在堆中分配内存。应该在栈中。NET框架是这么干的。JVM八成也是。int是常规类型。
      

  5.   

    手段很多。
    第一,知道new的作用,不用验证就可以了。
    第二,使用Instrumentation API。
    第三,使用JPofile分析。
      

  6.   

    楼主这个不正是用A[0]=new A();A[0]=null;证明了new确实分配空间了嘛。
      

  7.   

    Java中的基本类型是在栈中分配的,不是在堆中,但其对应的类是在堆中