这些不同类型的Arrays如何正常工作?

时间:2017-10-07 08:48:04

标签: java arrays

所以我所知道的是你通过以下方式声明一个数组:

int[] arr;

初始化它:

arr = new int [integer]

这些陈述也可以合并到:

int[] arr = new int[integer];

对于数组的声明,初始化和填充值的组合似乎也很清楚:

int[] arr = {1, 2, 4, 5, 9};

然而,令我困惑的是,这也有效:

int[] testAr = new int[]{1, 2, 3, 4};

更令我困惑的是多维数组的相同原理:

int[][] yarr = new int[][]{ new int[]{1, 2}, new int[]{2, 3}, new int[]{3, 4} };

为什么这样做以及这里发生了什么?我是否有理由以最后两个版本的方式创建数组?另外,当我想到它为什么在直接用数值填充数组时省略新关键字? 我刚刚开始学习对象,这违背了我目前所知的基本原则。

1 个答案:

答案 0 :(得分:1)

语句int[] arr = {1, 2, 3};是语句int[] arr = new int[]{1, 2, 3};的快捷方式。

语句int[][] arr = new int[][]{{1, 2}, {3, 4}}是语句new int[][]{new int[]{1, 2}, new int[]{3, 4}}的快捷方式。

它们完全相同,第一个添加一些语法糖以简化数组初始化。根据规范:

  

可以在声明中指定数组初始值设定项,也可以将其作为数组创建表达式的一部分,以创建数组并提供一些初始值。

如果在不同的范围内使用初始化程序,则会发生编译时错误。例如,

class Test {
    public static void main(String[] args) {
        method({1, 2, 3});          // it is not allowed
        method(new int[]{1, 2, 3}); // it is fine
    }

    static void method(int[] ints) { ... }
}