所以我所知道的是你通过以下方式声明一个数组:
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} };
为什么这样做以及这里发生了什么?我是否有理由以最后两个版本的方式创建数组?另外,当我想到它为什么在直接用数值填充数组时省略新关键字? 我刚刚开始学习对象,这违背了我目前所知的基本原则。
答案 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) { ... }
}