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