java - 创建的对象数量

标签 java memory-management

今天,我考试时遇到了以下问题:

String[] subjects=new String[10];
String subname="POPL-201617";
subjects[0]=subName;
subName=null;
  1. 创建了多少个对象?

    我的回答:将创建 11 个对象。第一个语句中的 10 个是字符串文字。

  2. 代码执行后存在多少个对这些对象的引用?

    我的回答:总共有一次引用“POPL-201617”。

  3. 解释这些对象是否符合垃圾回收的条件。

    我的回答:由于存在对“POPL-201617”的引用,因此它不符合垃圾回收的条件。即使没有引用,它也是一个内部字符串,因此不能被垃圾收集。其余的都有资格进行垃圾收集。

我对第一个陈述感到担忧。我们没有向 String 类的构造函数传递任何参数。它会形成对象还是仅在堆上分配空间?

另外,我的理解是,subject 最初指向数组的底部。因此,第一个元素最初有一个引用。但由于 subject[0] 现在引用 POPL,因此数组元素没有任何引用。

我说得对吗?或者我错过了什么?

最佳答案

您错过的唯一一件事是 String[]subjects=new String[10] 仅创建了一个 String[] 类型的对象。

关于java - 创建的对象数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40945360/

相关文章:

java - 如何从饲料燃烧器 channel 获取所有饲料历史记录?

java - 如何在不增加 eclipse 上堆大小的情况下避免内存不足异常

ios - Malloc 错误 "can' t 分配区域“失败,错误代码为 12。知道如何解决这个问题吗?

c++ - 删除之前删除的内存

c - 渐进式内存分配策略

java - 解析 BaseGameActivity

java - MongoDB:仅检索特定记录

objective-c - 在实现中使用 __weak 修改参数的存储

go - 在 Go 中直接在堆上构造原始类型?

java - 如何在所有包启动后调用 osgi 应用程序的启动方法?