new type[0] 和 null 之间的区别 - java

difference between new type[0] and null - java

有什么区别

type[] a = new type[0];

type[] a = null;

这两种形式是否占用任何内存?有什么相同点/不同点吗?

第一个(new type[0])实际上会创建一个数组对象(因此占用内存)。您可以使用(大小为 0 的)数组对象,例如获取其长度或对其进行迭代,但当然,您可以不访问其任何元素。因此,您可以将它传递给任何不对数组长度做出假设(而是进行适当检查)的函数,它会起作用。

第二个 (null) 不创建任何对象。如果您尝试访问任何成员,您将得到一个例外。

创建对象需要 3 个步骤。

  1. 减速 输入 A[]; -> 声明。 当你声明一个对象时,你并不为实例占用任何内存,而是为引用占用一些内存。

  2. 实例化 为此,您需要 'new' 关键字。 当你实例化一个对象时,你确实占用内存。

  3. 初始化 为此,您需要构造函数, 喜欢 -> 输入 A[] = new A[size]; 就是这样。