public class Test_Array
 {
     public static void main(String args[])
       {
         int[] a = new int[0];
    System.out.println(a.length);    
       }
 }
输出的是0,因为我定义的是长度为0的数组。public class Test_Array
 {
     public static void main(String args[])
       {
         int[] a = new int[0];
    System.out.println(a);    
       }
 }
在把程序稍微变一下。
输出的是内存的地址,说明在内存中已经有值和空间了,已经初始化了,但是我明明长度是0阿,有地址就意味着里面有值。。
在变一下:
 public class Test_Array
 {
     public static void main(String args[])
       {
         int[] a = new int[0];
    System.out.println(a[0]);    
       }
 }
程序报错:Exception in thread "main" java.lang.ArrayIndexOutOfBoundException: 0 at Test.Array.main(Test_Array.java:6)
现在程序报错,这也是我预料之中。。
有地址存在,但是值存到那了?
或者是我的推论都是错的????

解决方案 »

  1.   

    new对象了当然就有空间了,只是该数组对象没有元素而已记住,只要new就分配空间
      

  2.   

    我又把程序改了改。如下:
     public class Test_Array
     {
         public static void main(String args[])
           {
             int[] a = new int[0];
             int[] b;
             b = a;
        System.out.println(a);  
             System.out.println(b);  
           }
     }
    输出的结果:[I@35ce36
                [I@35ce36
    说明这里面传递的是引用,这个引用是做什么的???
    引用指向谁?
      

  3.   

    new对象了当然就有空间了,只是该数组对象没有元素而已记住,只要new就分配空间
    --------------------------------------------------------
    是分配空间,但是也伴随的着初始化,初始化的值是多少???
      

  4.   

    public class Test_Array
     {
         public static void main(String args[])
           {
     //String str = new String();
             int[] a = new int[6];
             //或者是int[] a = {1,2,3};
             //int[] b;
             //b = a;
        System.out.println(a);  
             //System.out.println(str);  
           }
     }
    这个程序的结果是一样:[I@35ce36
    说明,数组为空或者是有值,不影响此程序的输出结果。
    我刚才查资料,看到这么一句话:无论是哪种类型的数组,数组标识其实只是一个引用,指向堆中创建的一个真实对象,这个数组对象用以指向其他对象的引用。
    有担绕口,但是可以确定,即使数组为空,他也有标识。
    这可能就是这个问题的解释。
    现在有个问题,刚也差了基于数组的队列,也没有没有查出来关于这个引用到引到什么地方的解决方案
    也查了老师上学期给的ppt,查了数组内部的存储机制,分4层。
    如下:
    Data:Code:Stack:存的是数组里面第一个元素的引用Heap:数组里面的数据或者是还有这样一种解释,就是在调用System.out.println()方法的时候,自动寻找位置,这可能是JAVA 虚拟机的一种对这种情况的解释方式。
    也不清楚。
    这个问题谁能够给个答案??现在几乎可以确定,是个引用,但是这个引用到什么地方?
      

  5.   

    你把数组当成普通的类来看,数组有多大就算有几个数据成员。如果数组为0,就跟没有数据成员的对象一样。
    -----------------------------------------------------------------------------
    这个解释是目前最可能是解释,但是程序输出来的引用指向什么地方?
    我想问,如果了解JAVA的虚拟机是怎么工作的,请各位推荐一本书吧。
    哈哈,谢了
      

  6.   

    更正,说得不清楚
    也查了老师上学期给的ppt,查了数组内部的存储机制,分4层。
    如下:
    Data:Code:Stack:存的是数组里面第一个元素的引用,接下来是第2个元素的引用,等等。Heap:数组里面的数据
      

  7.   

    我们用java来解决实际问题。java技术交流,讨论java的技术细节和最新技术。欢迎中高级程序员加入讨论。QQ群:3001581
      

  8.   

    顶~~~
    kevinliuu(@。@) 再给几个解决方案阿