多维数组的理解

        今天看书发现所有的多维数组都是由一维数组演化而来的,于是动手实践了一番

public class StudyArray {
    public static void main(String[] args) {
        //首先objects进栈,然后在堆内存开辟了一块容纳3个对象的空间
        Object[] objects = new Object[3];
        //接着堆内存的objects[0]也在堆内存开辟了一块容纳6个对象的空间
        objects[0] = new Object[6];

        //然后objects1进栈,并指向objects[0]也就是指向了objects[0]在堆内存开辟了一块容纳6个对象的空间地址
        Object[] objects1 = (Object[]) objects[0];
        //接着堆内存的objects1[2]也可以理解为objects[0][2]在堆内存开辟了一块容纳2个对象的空间
        objects1[2] = new Object[2];

        //然后objects2进栈,并指向objects1[2]也就是指向了objects1[2]在堆内存开辟了一块容纳2个对象的空间地址
        Object[] objects2 = (Object[]) objects1[2];
        //接着堆内存的objects2[1]也可以理解为objects[0][2][1]在堆内存开辟了一块容纳4个对象的空间
        objects2[1] = new Object[4];

        //然后objects3进栈,并指向objects2[1]也就是指向了objects2[1]在堆内存开辟了一块容纳4个对象的空间地址
        Object[] objects3 = (Object[]) objects2[1];
        //接着堆内存的objects3[3]也可以理解为objects[0][2][1][3]在堆内存开辟了一块容纳6个int的空间
        objects3[3] = new int[6];

        //然后intArray进栈,并指向objects3[3]也就是指向了objects3[3]在堆内存开辟了一块容纳6个int的空间地址
        int[] intArray = (int[]) objects3[3];
        //最后为6个int实例赋值
        for (int i = 0; i < intArray.length; i++) {
            intArray[i] = i;
        }

        //然后输出以objects为开头找到intArray[2]的实例值
        System.out.println(((int[])((Object[])((Object[])((Object[])objects[0])[2])[1])[3])[2]);
    }
}

以上代码的图解如下:


猜你喜欢

转载自blog.csdn.net/note_remark/article/details/80844970
今日推荐