1

这有什么区别:

Object one = new Object();
Object two = one;

和这个:

Object one = new Object();
Object two = new Object();
two = one;

one当我改变 object 时对 object 有什么影响two

4

7 回答 7

15

第一个片段创建一个对象,并给它两个“名称”(引用)。

第二个片段创建了两个对象,但随后“忘记”了第二个对象,并将其替换为对第一个对象的引用:

图表

最后一张图显示了没有引用的第二个对象。此时,对象就可以进行垃圾回收了。

于 2013-07-06T13:04:00.413 回答
5

将对象视为框,将变量视为指向这些框的箭头。

所以,当你这样做

Object one = new Object();

您正在创建一个新框和一个指向该框的新箭头。

然而,当你这样做时

Object two = one;

您只是在创建一个新箭头并将其指向现有框。

于 2013-07-06T13:04:32.950 回答
2

当您执行 new 时,jvm 会为该对象分配一些内存,当您使用“=”时,它会将相同内存的引用提供给左侧的变量。

意味着如果你这样做,

Object x=new Object();
Object x1=x;

现在两者都将指向相同的内存引用,您可以通过这个名称 x 和 x1 访问该内存分配。

于 2013-07-06T13:05:29.303 回答
2

该对象位于堆上,可被任何具有引用值的代码共享,并且OBJECT包含成员variable值,因此哪个线程或方法更改object. 它为每个人而改变

所有reference变量都指的是相同的Object

让我们举一个例子类Rectangle

在此处输入图像描述

分配对象引用变量 -

1.不创建不同的对象。
2.不分配内存
3.不创建重复副本

更多信息:分配对象引用变量

于 2013-07-06T13:03:42.267 回答
1

使用new您正在创建一个新对象,使用=您只是分配对现有对象的引用。

让我们首先了解这些陈述的确切含义。

Object one = new Object();

这里Object的类型one是引用变量,new Object实际上创建了对象,它由one.

现在,当您这样做时two = one,引用变量two也将引用与引用相同的对象one。即现在它们都将引用同一个对象。

您的第二个片段不正确。您不能创建两个相同类型和相同名称的引用变量。您将不得不将其更改为。

   Object two = new Object();
   two = one;

好吧,这个链接有点离题,但它肯定会帮助你理解引用变量是如何引用对象的。 http://www.thejavageek.com/2013/06/22/how-do-objects-become-eligible-for-garbage-collection/

于 2013-07-06T13:02:58.483 回答
0

效果是一样的。

因为如果你这样做,两者都是参考类型:

对象二 = 一;

然后两者都引用相同的内存位置,并且其中一个的更改会影响另一个。

两种方法之间的唯一区别是在方法 2 中,您最初创建了 2 个不同对象的 2 个实例,但之后object two = one;它们将成为同一个对象。

于 2013-07-06T13:06:31.257 回答
0
Object one = new Object();
Object two = one;

在这里,您创建了一个对象并对同一对象有两个引用。

Object one = new Object();
Object two = new Object();
two = one;

在这里,您创建了两个对象,但后来将其中一个变量分配给了另一个对象,因此您再次对同一个对象有两个引用,但创建了额外的对象,现在是garbage collected.

于 2013-07-06T13:03:59.557 回答