提问者:小点点

这两种对数组(Java)的初始化有什么不同吗?


这两种对数组的初始化有什么区别吗? (两部作品)

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
    }
}

共3个答案

匿名用户

除了可读性之外,没有任何区别。

两行产生相同的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})

匿名用户

两个初始化都是一样的,后者只是缩写形式。

注意,使用这种方法不能在声明之后初始化数组。