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分配的内存。