=和new之间的区别

时间:2013-07-06 13:01:14

标签: java

这有什么区别:

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

和此:

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

当我更改对象one时,对象two会产生什么影响?

7 个答案:

答案 0 :(得分:15)

第一个代码段创建一个对象,并为其提供两个“名称”(引用)。

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

Diagram

最后一个图显示了没有引用的第二个对象。此时,该对象有资格进行垃圾回收。

答案 1 :(得分:5)

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

所以,当你这样做时

Object one = new Object();

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

然而,当你这样做时

Object two = one;

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

答案 2 :(得分:2)

对象在堆上,可以与任何具有引用值的代码共享,OBJECT包含成员variable值,因此哪个线程或方法更改无关紧要object中的数据。 每个人都有更改

所有reference个变量都指的是同一个Object

让我们看一个示例类矩形

enter image description here

分配对象引用变量 -

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

more info :Assigning Object Reference Variables

答案 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;之后它们将是同一个对象。