int[]   values   =   new     int[5];
int[]   biggerArray   =   new   int[10];
int   nextIndex   =   0;
...
if   (nextIndex   > =   values.length)   {
    values   =   biggerArray;
}
如上,为什么长度小的数组可以指向长度大的数组?
知道的请详细解说,不胜感激

解决方案 »

  1.   

    在JAVA程序中,数组代表一块内存地址,程序中的values和biggerArray分别代表数组拥有的内存地址的大小分别为5和10;
    好比:ABCDE代表5个内存单元,0123456789代表10个内存单元;当然可以让values重新指向biggerArray所代表的内存单元,因为values中的ABCDE分别对应了biggerArray中的相应内存单元(01234),biggerArray多余的内存地址不会被赋给alues,不会出现内存单元中的地址为空的情况。故(小->大)没有问题。
    如果要让10个内存单元对应到5个内存单元上的话,就会出现多余的内存单元没有被对应上,而出现空的情况。故(大->小)有问题。
      

  2.   

    区分一下概念
    values 是一个对象的引用,他应该指向一个内存的对象。 
    new int[5] 是一个真正的对象,它占用了内存的5个int大小的地址values = new int[5]; 表示 value 指向了这个对象,比如,还有如下的语句
    int[] values2 = values;
    此时,并不是 values 和 values 自己相同,而是 values2 和 values 指向了同一个对象而以如果执行
    values=null;
    此时 values 不再指向任何对象了,而values 依然指向了那个 new int[5] 的对象。总结一下:
    java中的变量可以理解为是一种带类型的指针,它可以指向任何一个类型相同的实际内存对象或其子类。
      

  3.   

    哦!更正一下1楼的说法,
    变量不存在什么大到小和小到大的问题,因为它只是一个指向对象的指针而以。至于1楼说的,大到小可能引起的问题,那时程序设计上的逻辑问题,不是java语言的问题。
      

  4.   

    我懂了,谢谢各位指点。
    原来帖子中的values只是一个引用(reference),它可以指向任何大小的int型的数组,它原来指向长度为5的数组,当然后来也可以再次指向长度为10的数组,只不过原来长度为5的数组再也不能引用到而已(JVM好像会处理掉这种东西不会再被引用到的对象实体)
      

  5.   

    int[]       values       =       new           int[5]; 
    int[]       biggerArray       =       new       int[10]; 
    values和biggerArray是变量名,存放的是指向的int数组的地址.
    可以相互赋值的