对象数组的内存分配

use*_*516 5 java memory arrays

在我的计算机科学课程中,我们被告知在创建数组时,JVM将根据数组的大小自动分配内存.例如,如果创建大小为10的整数数组,JVM将为该数组分配10*32位数据.

我的问题是,当您创建具有不同大小的对象数组时,此过程究竟是如何工作的?例如一个String对象.当你创建一个包含10个字符串的数组时,系统上是否为这些字符串实际保留了任何内存,或者因为它们只是指针,所以不需要内存分配?

aga*_*aga 5

由于String是一个扩展Object类的类,并且Java中的对象通过引用传递(并存储在变量中),因此字符串数组是String对象的引用数组.所以,当你这样做的时候

String[] a = new String[10];
Run Code Online (Sandbox Code Playgroud)

你正在创建一个引用数组,其中每个引用(不是它指向的对象)的大小是已知的(32位机器为32位,64位机器为64位).

更新:正如Jon Skeet 在其中一个答案中所说,实际引用的大小可能与本机指针大小相同,但并不能保证.