Java多维数组初始化的问题

昨天遇到了三维数组初始化的问题,代码如下,

int[][][] arr = new int[2][][];
arr[1] = new int[][]{{1,2}, {3,4}, {5,6}};//这里出问题了

研究了一下后有所收获,思考过程都在代码注释中,主要是快速初始化和匿名数组的问题。这里只是找到了一个可以编译的写法,盲人摸象,想要高屋建瓴的理解还是去了解Java编译器和虚拟机。

import java.util.Arrays;
public class Test
{
    public static void main(String[] args)
    {
        //声明了一个数组变量,但是这个变量还没有初始化,
        // 也就是说没有指向任何内存,甚至连null都不是,此时还不能使用
        int[] a;

        a = null;//数组也是对象,将a初始化为null
        System.out.println(Arrays.toString(a));

        a = new int[5];//将a初始化为一个长度为5的整型数组,数组中的元素默认初始化为0
        System.out.println(Arrays.toString(a));

        a = new int[]{1, 2, 3, 4, 5};//创建了一个匿名数组,并将a指向这个匿名数组
        System.out.println(Arrays.toString(a));

        //这是创建数组对象并同时赋值的简化书写形式,不需要调用new,也不能调用new
        int[] smallPrimes = {2, 3, 5, 7, 11};
        System.out.println(Arrays.toString(smallPrimes));

        /*
         * java中没有多维数组,也就是说arr表示引用一个数组,这个数组中存放的应该是int[][]型的引用
         * 但是这个时候arr没有初始化,它甚至连null都不是
         * */

        int[][][] arr = new int[2][][];
         /* new int[2][][]将在堆中开辟内存,内存的大小为两个int[][]型引用的长度
         * 默认初始化为null,也就是说arr[0]和arr[1]都是null
         * 如果要给arr[0]赋值,需要赋一个int[][]型的引用值,
         * 像下面这样*/
        arr[0] = new int[3][3];
        /*
         * 下面是创建一维数组对象并同时赋值的简化书写形式,
         * 不需要调用new,也不能调用new
         *int[] smallPrimes = {2, 3, 5, 7, 11};
         * 如果想要像这样给arr[1]赋值,应该已经没有机会了
         *
         * 下面是通过创建匿名数组初始化一维数组a
         * a = new int[]{1, 2, 3, 4, 5};//创建了一个匿名数组,并将a指向这个匿名数组
         * 如果是想要像这样给arr[1]赋值,考虑如何创建二维匿名数组
         *首先明确,二维数组中存放的是一维数组的引用,仿照一维数组的形式,
         * 在大括号中创建匿名一维数组就可以了*/
        arr[1] = new int[][]{new int[]{1, 2}, new int[]{3, 4}, new int[3], {}};
        System.out.println(Arrays.deepToString(arr));//查看arr的内容,是不规则数组
    }
}

 

你可能感兴趣的:(Java)