在我的计算机科学课程中,我们被告知在创建数组时,JVM将根据数组的大小自动分配内存。例如,如果您创建一个大小为10的整数数组,JVM将为该数组分配10 * 32位数据。
我的问题是,当您创建具有不同大小的对象数组时,此过程究竟是如何工作的?例如一个String对象。当你创建一个包含10个字符串的数组时,系统上是否为这些字符串实际保留了任何内存,或者因为它们只是指针,所以不需要内存分配?
答案 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可能尚未初始化。