不借助 IDE 自動完成,你能準確說出如何獲取:
正確答案:
int[] arr = new int[3];
System.out.println(arr.length); // 陣列:屬性 length
String str = "abc";
System.out.println(str.length()); // 字串:方法 length()
List list = new ArrayList<>();
System.out.println(list.size()); // 集合:方法 size()
final),屬於物件固有屬性。public final int length 欄位。// 1. 陣列建立表達式:指定長度
int[] arr1 = new int[5]; // 長度 5
int[][] matrix = new int[3][]; // 長度 3 (二維陣列是陣列的陣列)
// 2. 陣列初始化器:由元素數量決定長度
int[] arr2 = {1, 2, 3}; // 長度 3
String[] names = {"Alice", "Bob"}; // 長度 2
Array.java 原始碼。Array 類,仍需內部陣列儲存元素,層層包裝無意義。int[].class、arr.getClass() → class [I (int 陣列簽名)。String 內部封裝 char[] value (JDK 8) 或 byte[] value + coder (JDK 9+ 緊湊字串)。char str[6] = "hello"; 字元陣列即字串。char[] 是字元序列,String 是不可變字串物件,兩者轉換需顯式建構:char[] chars = {'a', 'b', 'c'};
String s1 = new String(chars); // 建構子
String s2 = String.valueOf(chars); // 靜態工廠
String s3 = String.copyValueOf(chars); // 複製
// 錯誤:chars.toString() 返回類似 "[C@1b6d3586",非字串內容
| 介面/類 | 方法 | 含義 | ||
|---|---|---|---|---|
| Collection | size() | 元素個數 | ||
| List | size() | 元素個數 | ||
| Set | size() | 元素個數 | ||
| Map | size() | 鍵值對個數 | ||
| Queue | size() | 元素個數 |
| 類型 | 獲取方式 | 本質 | 可變性 | 備註 |
|---|---|---|---|---|
| 陣列 | .length | final 實例欄位 | 建立後固定 | JVM 內建,無類定義 |
| String | .length() | 實例方法 | 不可變 | 封裝底層陣列/位元組 |
| Collection/Map | .size() | 介面方法 | 動態變化 | 統一介面契約 |
陣列屬性
length,字串方法length(),集合統一size()。
陣列固定看屬性,字串封裝看方法,集合動態看介面。
掌握這三者的設計哲學差異,不僅能避免低級錯誤,更能深入理解 Java 類型系統的封裝與抽象藝術。