gpt4 book ai didi

java - java中对象的内存管理

转载 作者:搜寻专家 更新时间:2023-11-01 04:02:59 25 4
gpt4 key购买 nike

我正在阅读这本关于数据结构的书,它涵盖了 Java 中的内存管理和孤立对象。教科书内容如下:

For example, consider the three assignment statements in the figure at left. After the third assignment statement, not only do a and b refer to the same Date object (1/1/2011), but also there is no longer a reference to the Date object that was created and used to initialize b. The only reference to that object was in the variable b, and this reference was overwritten by the assignment, so there is no way to refer to the object again. Such an object is said to be orphaned.

代码:

Date a=new Date(12, 31, 1999);
Date b=new Date(1, 1, 2011);
b=a;

这个说法是真的吗? a 的引用(对象 Date(12, 31, 1999) 的内存位置不应该是 b 的引用吗?这似乎是一个巨大的错误,但甚至有一张图片显示内存块 12, 31, 1999 是孤立的对象。

图片: http://imageshack.us/f/818/3tkx.jpg/

最佳答案

在 Java 中,您总是将右侧 的内容分配给对左侧 的引用。

所以你的陈述是这样说的:

  1. 将新的 Date 对象 Date(12, 31, 1999) 赋给变量 a
  2. 将新的 Date 对象 Date(91, 1, 2011) 赋给变量 b
  3. 将变量a 的引用分配给变量b

所以如果我按照这些步骤,它看起来像这样:

  1. a -> 日期(12, 31, 1999)

  2. a -> 日期(12, 31, 1999)b -> 日期(1, 1, 2011)

  3. a -> 日期(12, 31, 1999)b -> 日期(12, 31, 1999)

请注意,在此分配之后,不再引用 Date(1, 1, 2011) 的原始对象,因为您无法从您的应用程序访问它。其原始引用变量 b 被覆盖,现在对象 Date(12, 31, 1999)ab 引用Date(91, 1, 2011)孤立的并准备好进行垃圾回收。

想象一下,就好像您拿着剑和斧头一样。首先你拿起一把剑。然后你拿起斧头。之后你放下剑,用双手拖着你手中的斧头。在那之后,你不再持有你掉落的剑(它丢失了)。

编辑:这是一个错误,如果您告诉本书的作者他将不胜感激。

关于java - java中对象的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18055199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com