在java中声明一个数组时,我们必须使用new关键字动态分配内存。
class array
{
public static void main(String ars[]) {
int A[] = new int[10];
System.out.println(A.length);
}
}
上面的代码将创建一个包含10个元素的1D数组,每个元素4个字节。
输出将为10
。
但是当您运行以下相同的代码时:
class array {
public static void main(String ars[]) {
int A[] = new int[0];
System.out.println(A.length);
}
}
输出为0.我想知道当你编写new int[0]
时,Java是否为数组分配了一些内存?如果是多少?
答案 0 :(得分:10)
是的,它会分配一些内存,但数量会因JVM实现而异。你需要以某种方式表示:
JVM可能会执行各种优化(如果尚未进行GC /重定位,则从对象指针派生系统哈希代码,使用单个位表示永不锁定的对象,使用单个位表示空数组等),但仍需要分配一些内存。
修改:例如,按照this post上的步骤操作,我的JVM报告new int[0]
的大小为16,new int[4]
的大小为32。