Java多维数组初始化的问题

Java 专栏收录该内容
1 篇文章 0 订阅

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

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的内容,是不规则数组
    }
}

 

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

count_0

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值