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