【发布时间】:2013-08-05 09:51:44
【问题描述】:
我正在阅读这本关于数据结构的书,它涵盖了 Java 中的内存管理和孤立对象。教科书是这样说的:
例如,考虑图中的三个赋值语句 左。在第三个赋值语句之后,不仅 a 和 b 引用 到同一个日期对象(1/1/2011),但也不再有 对创建并用于初始化的 Date 对象的引用 b。对该对象的唯一引用是在变量 b 中,而这个 引用被赋值覆盖了,所以没有办法 再次引用该对象。这样的对象被称为孤立对象。
代码:
Date a=new Date(12, 31, 1999);
Date b=new Date(1, 1, 2011);
b=a;
这句话是真的吗? a 的引用(对象Date(12, 31, 1999) 的内存位置不应该是 b 的引用吗?这似乎是一个巨大的错误,但甚至有一张图片显示 1999 年 12 月 31 日的内存块是孤立对象。
【问题讨论】:
-
我明白你的意思。代码应为
a = b;以使声明为真。 -
是的,那本书中的说法是错误的吗?
-
Date(1, 1, 2011) 将被孤立,因为链接 b 指向 Date(12, 31, 1999)
-
顺便问一下这是什么书?
-
algs4.cs.princeton.edu/errata/errata-printing1.php => 第 1 章,第104 已报告并为未来版本修复。
标签: java object memory memory-management reference