Java 中 new
關鍵字的作用
在 Java 中,new
關鍵字用于 在堆內存中分配空間 并創建對象。
- 數組 和 集合 在 Java 中都是對象,因此必須使用
new
來創建實例。 - Java 和 C 之間的主要區別在于 內存管理 和 對象的創建方式。
Java 與 C 中數組 & 集合的創建方式對比
語言 | 數組創建方式 | 集合創建方式 | 是否使用 new |
---|---|---|---|
Java | int[] arr = new int[5]; | List<Integer> list = new ArrayList<>(); | ? 必須使用 new |
C | int arr[5]; | int* ptr = (int*)malloc(sizeof(int) * 5); (使用動態分配) | ? 數組不需要 new ,但動態分配需要 malloc |
1. Java 中 new
的必要性
在 Java 中:
- 數組 和 集合 都是對象,因此必須用
new
來初始化。 - Java 不會 自動分配數組空間(不像 C 允許
int arr[5];
)。 new
負責在堆上分配內存,并返回對象的引用。
(1)Java 數組創建
// 必須使用 new 來分配內存
int[] arr = new int[5];
arr[0] = 10; // 正確
如果不使用 new
,會報錯:
int[] arr;
arr[0] = 10; // ? 運行時報錯:NullPointerException(未分配內存)
(2)Java 集合創建
// ArrayList 是一個對象,必須使用 new
List<String> list = new ArrayList<>();
list.add("Hello");
2. C 中 new
與 malloc
(動態分配)
在 C 語言中:
- 靜態數組不需要
new
或malloc
:int arr[5]; // 直接分配,不需要 new
- 動態數組需要
malloc
:int* arr = (int*)malloc(5 * sizeof(int)); // C 中的動態分配
3. Java 與 C 的區別
語言 | 是否需要 new | 主要區別 |
---|---|---|
Java | ? 需要 new | 所有對象都在堆上,使用 new 創建。 |
C | ? 不需要 new | 數組可在棧上,動態分配時使用 malloc 。 |
4. 總結
💡 為什么 Java 需要 new
?
- Java 所有對象(包括數組和集合)都是引用類型,必須用
new
分配堆內存。 - C 允許在棧上創建數組,但 Java 數組 必須
new
。 - Java 自動垃圾回收,而 C 需要
free()
釋放malloc
分配的內存。