黑马程序员技术交流社区
标题:
java数组内存分配机制问题
[打印本页]
作者:
zhanghuxin
时间:
2013-11-14 21:01
标题:
java数组内存分配机制问题
import java.util.*;
public class ObjectArrayTest
{
public static void main(String[] args)
{
//定义、并初始化一个Object数组
Object[] objArr = new Object[3];
//让objArr所引用数组的第二个元素再次指向一个长度为2的Object[]数组
objArr[1] = new Object[2];
//将objArr[1]的值赋给objArr2,即让objArr2和objArr[1]指向同一个数组对象
Object[] objArr2 = (Object[])objArr[1];
//让objArr2所引用数组的第二个元素再次指向一个长度为3的Object[]数组
objArr2[1] = new Object[3];
//将objArr2[1]的值赋给objArr3,即让objArr3和objArr2[1]指向同一个数组对象
Object[] objArr3 = (Object[])objArr2[1];
//让objArr2所引用数组的第二个元素再次指向一个长度为3的int[]数组
objArr3[1] = new int[5];
////将objArr3[1]的值赋给iArr,即让iArr和objArr3[1]指向同一个数组对象
int[] iArr = (int[])objArr3[1];
//依次为iArr数组的每个元素赋值
for (int i = 0 ; i < iArr.length ; i++ )
{
iArr[i] = i * 3 + 1;
}
//直接通过objArr访问iArr数组的第3个元素
System.out.println( ((int[])((Object[])((Object[])objArr[1])[1])[1])[2] );
}
}
想问一下,大家对这个程序数组在内存中的分配机制是咋理解,我看了好久,不明白!!
作者:
smileven
时间:
2013-11-14 22:02
(1)//定义、并初始化一个Object数组
Object[] objArr = new Object[3];
=>内存中有了:objArr[0],objArr[1],objArr[2];
(2)//让objArr所引用数组的第二个元素再次指向一个长度为2的Object[]数组
objArr[1] = new Object[2];
=>内存中的objArr[1]指向了一个Object对象数组
objArr[0]
objArr[1]<---objArr[1][0],objArr[1][1]
objArr[2]
(3)//将objArr[1]的值赋给objArr2,即让objArr2和objArr[1]指向同一个数组对象
Object[] objArr2 = (Object[])objArr[1];
=>
objArr[1](objArr2)<--|objArr[1][0],objArr[1][1]
objArr2<----------|
这时的objArr[1][0],objArr[1][1]也就是objArr2[0],objArr2[1]
(4)//让objArr2所引用数组的第二个元素再次指向一个长度为3的Object[]数组
objArr2[1] = new Object[3];
=>objArr2[1]<-------------objArr2[1][0],objArr2[1][1],objArr2[1][2],
(5)//将objArr2[1]的值赋给objArr3,即让objArr3和objArr2[1]指向同一个数组对象
Object[] objArr3 = (Object[])objArr2[1];
=>objArr2[1]<-------------|objArr2[1][0],objArr2[1][1],objArr2[1][2],
objArr3<--------------|
这时的objArr2[1][0],objArr2[1][1],objArr2[1][2]也就是objArr3[0],objArr3[1],objArr3[2],
(6)//让objArr2所引用数组的第二个元素再次指向一个长度为3的int[]数组
objArr2[1] = new int[3];
=>objArr2[1]<-------------|整数1,整数2,整数3;
objArr3<--------------|objArr3[0],objArr3[1],objArr3[2](原来的objArr2[1][0],objArr2[1][1],objArr2[1][2],)
这时的objArr2[1]引用的值不在等于objArr3;
objArr2[1][0],objArr2[1][1],objArr2[1][2](三个int型整数)和objArr3[0],objArr3[1],objArr3[2](三个Object对象)不再相等。
(7)//将objArr3[1]的值赋给iArr,即让iArr和objArr3[1]指向同一个数组对象
int[] iArr = (int[])objArr3[1];
=>objArr3[1]<------------|整数1,整数2......
objArr2[1] = new Object[3];
作者:
向阳泪无痕
时间:
2013-11-14 22:41
说通俗点就是数组里放数组……通过引用来连接,像指针一样,指向它。输出就是利用引用连接来输出的。
作者:
zhanghuxin
时间:
2013-11-15 18:15
谢了啊,有点想法了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2