日期:2014-05-20  浏览次数:20709 次

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

------解决方案--------------------
在JAVA程序中,数组代表一块内存地址,程序中的values和biggerArray分别代表数组拥有的内存地址的大小分别为5和10;
好比:ABCDE代表5个内存单元,0123456789代表10个内存单元;当然可以让values重新指向biggerArray所代表的内存单元,因为values中的ABCDE分别对应了biggerArray中的相应内存单元(01234),biggerArray多余的内存地址不会被赋给alues,不会出现内存单元中的地址为空的情况。故(小->大)没有问题。
如果要让10个内存单元对应到5个内存单元上的话,就会出现多余的内存单元没有被对应上,而出现空的情况。故(大->小)有问题。
------解决方案--------------------
区分一下概念
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中的变量可以理解为是一种带类型的指针,它可以指向任何一个类型相同的实际内存对象或其子类。

------解决方案--------------------
哦!更正一下1楼的说法,
变量不存在什么大到小和小到大的问题,因为它只是一个指向对象的指针而以。至于1楼说的,大到小可能引起的问题,那时程序设计上的逻辑问题,不是java语言的问题。
------解决方案--------------------
针对3楼的说法,有道理。像我那么理解也行吧。不过还是要谢谢指正。
------解决方案--------------------
int[] values = new int[5]; 
int[] biggerArray = new int[10]; 


values和biggerArray是变量名,存放的是指向的int数组的地址.
可以相互赋值的