2017-10-07 33 views
1

所以我知道的是,你聲明數組以下幾種方式:這些不同類型的陣列的脫色是如何工作的?

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

爲什麼這項工作什麼這裏發生了什麼?是否有理由讓我像過去的兩個版本一樣創建一個數組?另外當我想到它爲什麼可以直接用值直接填充數組時忽略新關鍵字? 我剛開始瞭解對象,這違背了我迄今所知的基本原則。

+4

爲什麼這樣嗎?因爲這就是語言的定義。 – TDG

+0

'new int [] {1,2,3,4}'是創建和初始化數組最常用的方法。沒有'new int []'的方法只是語法糖,但只能在聲明變量的同時才起作用(例如'int [] arr; arr = {1,2,3};'不允許) 。 –

+0

你應該先閱讀JLS [數組初始化程序](https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.6) – rkosegi

回答

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) { ... } 
}