首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用变量数组

引用变量数组
EN

Stack Overflow用户
提问于 2012-01-31 07:30:12
回答 3查看 444关注 0票数 1

我的课文要求我计算对一个对象的引用。在给定的代码中包含以下内容:

代码语言:javascript
复制
Honey honeypot = new Honey();

Honey [ ] ha = {honeypot, honeypot, honeypot, honeypot};

Bees b1 = new Bees();

b1.beeHA = ha;

其中,Bees的构造函数创建Honey[ ] beeHA数组。

现在,我认为beeHA将把引用honeypot放在四个位置,数组ha也是如此,这将是四个独立的引用加上来自ha数组的四个引用,形成八个引用。但是这本书给出的答案是,beeHA数组只指向ha数组,而不是honeypot引用变量引用的对象,只进行了四次引用。我的想法正确吗?

如果数组ha被垃圾回收(本章的主题),b1.beeHA[x]不会仍然包含honeypot引用变量吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-31 07:36:36

ha不是一个数组,它是一个变量。变量的值是对数组的引用-与b1.beeHA的值一样。因此,谈论“数组ha”被垃圾回收是没有实际意义的。当你写的时候:

代码语言:javascript
复制
b1.beeHA = ha;

这只是将ha的值复制到b1.beeHA中。它不是在复制数组-它只是在复制引用。

您所显示的代码创建了一个数组,其中包含对一个Honey实例的四个引用。有两个对该数组的引用-一个在变量ha中,另一个在变量b1.beeHA中。

票数 1
EN

Stack Overflow用户

发布于 2012-01-31 07:36:24

Java类型系统中的关键区别是值语义引用语义:当您说x = y;时,值将被复制,而引用将被别名。

原始类型(如int)具有值语义;类类型和数组具有引用语义。因此,当您说b1.beeHA = ha;时,您为数组的引用设置了别名,也就是说,现在hab1.beeHA都引用了同一个数组。

垃圾收集器不会在仍有对数组的引用时收集该数组。

票数 2
EN

Stack Overflow用户

发布于 2012-01-31 07:36:52

在没有更多上下文的情况下,您的示例有点令人困惑;我看不到这些变量的范围。

如果有一个对象持有对一个对象的引用,那么该对象将不会被垃圾回收。蜜罐引用指向Honey的新实例;ha数组也是如此。b1实例指向ha数组。

如果绘制一个对象图,b1实例将指向ha,而ha又指向蜜罐。

如果b1是垃圾收集的,那么整个图都是合格的。

只要b1和ha还存在,Honey实例就不会被GC。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9072361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档