为什么以下无法初始化数组?
public class TestArrays {
private static int[] numbers;
public static void main(String[] args) {
numbers = {1,2,3}; //error
}
} //class
但是是这样吗?
public class TestArrays {
private static int[] numbers;
public static void main(String[] args) {
int[] arr = {1,2,3};
numbers = arr;
}
} //class
Java 允许您使用花括号初始化数组,如下所示:
所述格式,仅在我们声明变量的情况下,可以简化为
相反,第一种方法在没有声明的情况下确实有效:
为什么?好吧,除了为什么在语言规范中这样定义它之外,我们还必须询问它的创建者为什么他将简短形式限制为变量声明。我的观点是,如果我们承认以下几点:
如果在第二个赋值中我们是创建一个相同大小的新数组,或者我们正在替换已经存在的对象(数组)中的值,这将不完全清楚。通过强迫自己提出
new int[]
,疑问得到澄清。补充@Pablo Lozano 的回答。Java 规范在以下段落中建立了正确的语法及其使用位置:
JLS 10.6:
西班牙语是:
他们将初始化数组定义为:
数组创建表达式定义为: