这两种对数组的初始化有什么区别吗? (两部作品)
public class Test
{
public static void main(String[] args)
{
int[] array1 = new int[]{1, 2, 3};
int[] array2 = {1, 2, 3};
}
}
可以更改内容:
public class Test
{
public static void main(String[] args)
{
int[] array1 = new int[]{1, 2, 3};
int[] array2 = {1, 2, 3, 4};
array1[0] = 15;
array2[0] = 16;
System.out.println(array1[0]); // prints 15
System.out.println(array2[0]); // prints 16
}
}
除了可读性之外,没有任何区别。
两行产生相同的Java字节码。
int[] array1 = new int[]{1, 2, 3};
0: iconst_3
1: newarray int
3: dup
4: iconst_0
5: iconst_1
6: iastore
7: dup
8: iconst_1
9: iconst_2
10: iastore
11: dup
12: iconst_2
13: iconst_3
14: iastore
15: astore_1
start local 1 // int[] array1
int[] array2 = {1, 2, 3};
0: iconst_3
1: newarray int
3: dup
4: iconst_0
5: iconst_1
6: iastore
7: dup
8: iconst_1
9: iconst_2
10: iastore
11: dup
12: iconst_2
13: iconst_3
14: iastore
15: astore_1
start local 1 // int[] array2
后者是前者的捷径。 唯一需要显式使用new int[]
的情况是匿名声明数组,例如someMethod(newint[]{1,2,3})
。
两个初始化都是一样的,后者只是缩写形式。
注意,使用这种方法不能在声明之后初始化数组。