当前位置:  开发笔记 > 编程语言 > 正文

在Java中为Array中的元素分配引用时到底发生了什么?

如何解决《在Java中为Array中的元素分配引用时到底发生了什么?》经验,为你挑选了2个好方法。

我在Java中做以下语句,

Obj t[] = new Obj[10];

Obj a = new Obj("a");
t[0] = a;

a = new Obj("b");
t[1] = a;

为什么在java中,当我访问t [0]时,它返回"a"而不是"b"?这是因为GC吗?我能相信做这样的手术是安全的



1> S.Lott..:

这正是发生了什么.

Obj t[] = new Obj[10];  // 1

Obj a = new Obj("a");   // 2
t[0] = a;

a = new Obj("b");       // 3
t[1] = a;               // 4

    您创建一个数组,可以容纳10个实例的引用Obj.叫这个obj01.你分配给它t.请注意,变量t和实际对象obj01具有非常随意的关系.

    你创建一个实例Obj,调用它obj02.您将此对象的引用分配给变量a.请注意,变量a和实际对象obj02具有非常随意的关系.

    你也把这个参考t[0].你有两个地方知道一个对象.对象obj02(具有值"a")被称为a并且也称为t[0].

    你创建一个实例Obj,调用它obj03.您将此新对象的引用分配给旧变量a.请注意,变量a和实际对象obj03具有非常随意的关系. a用于引用obj02,但它不再引用它.

    所以,obj01(一个数组)被引用t; obj02(和实例Obj)被称为t[0]; obj03(一个例子Obj)被称为a.

    你把引用a放进去了t[1].所以,t[1]得到一个参考obj03.

此时,所有对象都由范围内的变量引用.由于所有对象都有引用,因此无法对其进行垃圾回收.



2> 小智..:

问题是,Java没有指针.

将一个对象变量分配给另一个时,它会更改该变量指向的内容,但不会更改您可能拥有的任何其他引用.

所以:

Object a = new Object("a");
Object b = new Object("b");

a = b;
b = new Object("c");

// At this point, a = "b"
// and b = "c"

如您所见,虽然您首先设置a = b,但是当您将b设置为新对象时,仍会保留对旧对象的引用.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有