当前位置: 首页 > 知识库问答 >
问题:

对象数组的内存分配[重复]

丘智志
2023-03-14

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

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

共有3个答案

田焕
2023-03-14

数组本身就是Java中的一个对象,因此它将始终在运行时创建。来自官方教程:

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

//创建一个整数数组

anArray=new int[10];

如果缺少此语句,编译器将打印如下错误,编译将失败:

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

StackOverflow中的另一个答案。

仲孙献
2023-03-14

int[]=

<代码>字符串[]=

<代码>内景[][]=

周朗
2023-03-14

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

String[] a = new String[10];

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

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

 类似资料:
  • 在我的应用程序中,我有一个单一的活动架构,我为每个片段定义了一个“视图”类。 这个“视图”类包含视图状态和视图操作,它们引用视图的数据和操作。 例如,我有一个“MainFragment.kt”和一个相关的“MainView.kt”文件,它是这样的: 然后导入“主状态”和“操作”,并在“主状态ragment.kt”及其“视图模型”类中使用。 正如您所见,“MainView”被定义为一个对象,因为我不

  • 如何在两个属性之后对对象数组进行分组?在以下情况下是否可以使用减少? 例如:按国家和城市将以下数组分组,并对“年龄”属性求和: /*预期结果:*/

  • jvm的对象头是如何存储的? 对象头中有哪些信息? 对象头里面的东西:运行时元数据,类型指针:Hashcode,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳。如果是数组的化还需要记录长度 就比如下面的代码来看,内存分布情况: 由于是static的main方法所有局部变量表没有this,如果是非静态方法的话第一个放this。 其次: 栈帧:局部变量表,操作数栈,动态链接,方法返回

  • 本文向大家介绍js的数组/对象在内存中分别是如何存储的?相关面试题,主要包含被问及js的数组/对象在内存中分别是如何存储的?时的应答技巧和注意事项,需要的朋友参考一下 JavaScript的对象是以一个描述ID、一个内容指针、以及跟随该对象的属性进行储存的。 当对象构造简单时,内容指针并不起作用,而所有属性直接跟在对象的内存地址之后。 比如对象,若其内存地址为0x1000,则该对象在内存中为 0x

  • 现在我有了新阵列 现在,现有的_array和新的_array都有名称值“b”,我希望它从新数组中移除

  • 问题内容: 这有效: 但这不是: 为什么?我有一种感觉,这与对象是内置类有关,但是我发现这并不令人满意,因为我在MyClass的声明中没有进行任何更改。 问题答案: Python将属性存储在字典中。您可以将属性添加到,看到它具有 : 重要的区别是没有属性。