<分区>
在我的计算机科学类(class)中,我们了解到当您创建数组时,JVM 会根据数组的大小自动分配内存。例如,如果您创建一个大小为 10 的整数数组,JVM 会为该数组分配 10 * 32 位的数据。
我的问题是,当您创建大小不同的对象数组时,这个过程究竟是如何工作的?例如一个字符串对象。当您创建一个包含 10 个字符串的数组时,系统上是否实际为这些字符串保留了任何内存,或者因为它们只是指针,所以不需要内存分配?
<分区>
在我的计算机科学类(class)中,我们了解到当您创建数组时,JVM 会根据数组的大小自动分配内存。例如,如果您创建一个大小为 10 的整数数组,JVM 会为该数组分配 10 * 32 位的数据。
我的问题是,当您创建大小不同的对象数组时,这个过程究竟是如何工作的?例如一个字符串对象。当您创建一个包含 10 个字符串的数组时,系统上是否实际为这些字符串保留了任何内存,或者因为它们只是指针,所以不需要内存分配?
最佳答案
由于 String
是 Object
类的扩展类,并且 Java 中的对象通过引用传递(并存储在变量中),因此字符串数组是一个对 String
对象的引用数组。所以,当你这样做的时候
String[] a = new String[10];
您正在创建一个引用数组,其中每个引用(不是它指向的对象)的大小都是已知的(32 位机器为 32 位,64 位机器为 64 位)。
更新: 正如 Jon Skeet 所说 in one of his answers实际引用的大小可能与 native 指针大小相同,但不能保证。
关于java - 对象数组的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099771/