这句话在Java中意味着什么?

Pho*_*nix 0 java

假设有一个数组声明:

int [] a = new int[3]; 
Run Code Online (Sandbox Code Playgroud)

我正在读一本书,说明我们需要在运行时显式创建数组的原因是因为我们无法知道在编译时为数组保留多少空间.那么,在上面的这种情况下,我们不知道我们需要保留底层java平台的int大小的3倍吗?

Jon*_*eet 5

那么,在上面的这种情况下,我们不知道我们需要保留底层java平台的int大小的3倍吗?

实际上稍微多一点 - 因为数组是具有类引用的对象,以及长度.

但是,是的,在这种情况下,你碰巧知道大小提前.但Java也让你写:

int[] a = new int[getLengthFromMethod()];
Run Code Online (Sandbox Code Playgroud)

...在这种情况下,编译时不会知道内存量.与在编译时必须知道大小相比,这种灵活性使得使用数组变得相当简单.(想象一下,尝试以ArrayList其他方式开展工作.)

但请记住,内存分配在Java中是非常动态的 - 它实际上只是预先知道的堆栈帧的大小,然后只是相对而言(因为参考的大小可以在平台之间变化).所有1个对象都在堆上分配,引用用于跟踪它们.


1好吧,除了智能JVM之外,它们有时能够在执行转义分析后分配内联.