这有什么区别:
Object one = new Object();
Object two = one;
和这个:
Object one = new Object();
Object two = new Object();
two = one;
one
当我改变 object 时对 object 有什么影响two
?
这有什么区别:
Object one = new Object();
Object two = one;
和这个:
Object one = new Object();
Object two = new Object();
two = one;
one
当我改变 object 时对 object 有什么影响two
?
第一个片段创建一个对象,并给它两个“名称”(引用)。
第二个片段创建了两个对象,但随后“忘记”了第二个对象,并将其替换为对第一个对象的引用:
最后一张图显示了没有引用的第二个对象。此时,对象就可以进行垃圾回收了。
将对象视为框,将变量视为指向这些框的箭头。
所以,当你这样做
Object one = new Object();
您正在创建一个新框和一个指向该框的新箭头。
然而,当你这样做时
Object two = one;
您只是在创建一个新箭头并将其指向现有框。
当您执行 new 时,jvm 会为该对象分配一些内存,当您使用“=”时,它会将相同内存的引用提供给左侧的变量。
意味着如果你这样做,
Object x=new Object();
Object x1=x;
现在两者都将指向相同的内存引用,您可以通过这个名称 x 和 x1 访问该内存分配。
该对象位于堆上,可被任何具有引用值的代码共享,并且OBJECT
包含成员variable
值,因此哪个线程或方法更改object
. 它为每个人而改变。
所有reference
变量都指的是相同的Object
。
让我们举一个例子类Rectangle。
分配对象引用变量 -
1.不创建不同的对象。
2.不分配内存
3.不创建重复副本
使用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/
效果是一样的。
因为如果你这样做,两者都是参考类型:
对象二 = 一;
然后两者都引用相同的内存位置,并且其中一个的更改会影响另一个。
两种方法之间的唯一区别是在方法 2 中,您最初创建了 2 个不同对象的 2 个实例,但之后object two = one;
它们将成为同一个对象。
Object one = new Object();
Object two = one;
在这里,您创建了一个对象并对同一对象有两个引用。
Object one = new Object();
Object two = new Object();
two = one;
在这里,您创建了两个对象,但后来将其中一个变量分配给了另一个对象,因此您再次对同一个对象有两个引用,但创建了额外的对象,现在是garbage collected
.