对象数组的内存分配

时间:2013-11-20 15:17:25

标签: java arrays memory

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

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

3 个答案:

答案 0 :(得分:5)

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

String

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

更新:正如Jon Skeet所说,in one of his answers实际引用的大小可能与本机指针大小相同,但不能保证。< / p>

答案 1 :(得分:2)

int[] =&gt;整数数组

String [] =&gt;字符串实例的指针数组

int[][] =&gt;指向(分离,不同)int []数组

的指针数组

答案 2 :(得分:0)

数组本身就是Java中的一个对象,所以它总是在运行时创建。 From Official tutorial

  

创建数组的一种方法是使用new运算符。下一个   ArrayDemo程序中的语句分配一个足够的数组   内存为10个整数元素,并将数组分配给anArray   变量

     

//创建一个整数数组

     

anArray = new int [10];

     

如果这样   语句丢失,然后编译器打印出类似的错误   跟随,编译失败:

     

ArrayDemo.java:4:变量anArray可能尚未初始化。

另一个answer in StackOverflow