package Dec2016;
public class Ques1230 {
int array = {1, 2, 3}; // 1
int array[] = {1, 2, 3}; // 2
int[] array = {1, 2, 3}; // 3
int array[] = new int{1, 2, 3}; // 4
int array = [1, 2, 3]; // 5
}
請判斷哪些語句能編譯通過,哪些會報錯,並說明錯誤原因。
| 代碼 | 結果 | 解析 |
|---|---|---|
int array = {1, 2, 3}; |
❌ 編譯錯誤 | 類型不匹配:左側是基本類型 int,右側是數組初始化器。基本類型變量不能直接賦值為數組。 |
int array[] = {1, 2, 3}; |
✅ 編譯通過 | C 風格語法:類型後置 [],靜態初始化器賦值。合法但不推薦(降低可讀性)。 |
int[] array = {1, 2, 3}; |
✅ 編譯通過 | 推薦風格:類型前置 int[],語義清晰「int 數組類型的變量 array」。 |
int array[] = new int{1, 2, 3}; |
❌ 編譯錯誤 | new int[3] 需指定長度,或 new int[]{1,2,3}(匿名數組)。大括號不能跟在 new int 後。 |
int array = [1, 2, 3]; |
❌ 編譯錯誤 | 中括號 [] 是數組訪問/聲明語法,不能用於賦值右側。JS/JSON 風格在 Java 無效。 |
// 1. 靜態初始化(聲明時賦值)—— 推薦
int[] arr1 = {1, 2, 3};
int[] arr2 = new int[]{1, 2, 3}; // 匿名數組,可用於方法參數
// 2. 動態初始化(指定長度,默認值 0)
int[] arr3 = new int[3];
arr3[0] = 1; arr3[1] = 2; arr3[2] = 3;
// 3. 多維數組
int[][] matrix = {{1,2}, {3,4}};
int[][] matrix2 = new int[2][3];
類型[] 變量名(推薦)或 類型 變量名[]。new 類型[長度])。new 類型[]{值列表},無變量名,常作實參傳遞。若在方法中寫:
void foo(int[] arr) {}
foo(new int[]{1,2,3}); // 匿名數組
foo({1,2,3}); // ❌ 錯誤:靜態初始化器只能在聲明處使用
這是因為靜態初始化器屬於聲明語句一部分,不能獨立作為表達式。