A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhanghuxin 中级黑马   /  2013-11-14 21:01  /  1348 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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] );
        }
}
想问一下,大家对这个程序数组在内存中的分配机制是咋理解,我看了好久,不明白!!

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
To + 1 + 2 多来云七发贴解决问题

查看全部评分

3 个回复

倒序浏览
(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];

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
向阳泪无痕 来自手机 高级黑马 2013-11-14 22:41:33
藤椅
说通俗点就是数组里放数组……通过引用来连接,像指针一样,指向它。输出就是利用引用连接来输出的。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢了啊,有点想法了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马