Java 将一个对象指定给另一个对象时会发生什么

Java 将一个对象指定给另一个对象时会发生什么,java,object,Java,Object,但是如果我从//e2=e1中删除注释当我运行代码时,系统将打印24而不是10。我不明白为什么会这样 据我所知,系统只会将e1实例的值复制到e2实例中。如果系统将这样做,结果应保持不变,因为两个对象属于同一类 据我所知,系统只是将e1实例的值复制到e2实例中 不,当您执行e2=e1时,您正在复制对象引用-您没有复制对象-因此变量e1和e2都将指向同一对象 所以当你做增量运算时,它们都在增加相同的计数字段 只有在没有赋值的情况下,增量才会发生在两个不同的实例上。将一个对象赋值给另一个对象只会赋值对象

但是如果我从
//e2=e1中删除注释当我运行代码时,系统将打印24而不是10。我不明白为什么会这样

据我所知,系统只会将
e1
实例的值复制到
e2
实例中。如果系统将这样做,结果应保持不变,因为两个对象属于同一类

据我所知,系统只是将e1实例的值复制到e2实例中

不,当您执行
e2=e1
时,您正在复制对象引用-您没有复制对象-因此变量
e1
e2
都将指向同一对象

所以当你做增量运算时,它们都在增加相同的计数字段


只有在没有赋值的情况下,增量才会发生在两个不同的实例上。

将一个对象赋值给另一个对象只会赋值对象引用(或多或少的指针)。它不复制成员变量等

你需要了解一下。从Java的wiki
clone()
的第一段开始:

在Java中,对象通过引用变量进行操作,并且 没有用于复制对象的运算符“赋值”运算符 复制引用,而不是对象。clone()方法提供 这是缺少的功能


这是Java的基本原理之一。每个变量都只是某个对象的句柄。执行

Hellooooo....
Hellooooo....
Hellooooo....
Hellooooo....
10

不复制对象的值,它将两个
句柄都指向创建的第二个对象。您实例化的第一个
Echo
对象现在根本没有被引用,并且将在下次gc运行时被垃圾收集。

尝试使用另一个对象作为参数为方法Echo创建构造函数。 并将参数对象的值指定给此对象。 即 '''

'''

然后将节点e2创建为:

Echo(Echo echo) {
  this.count = echo.count;
}
e1=e2
Echo(Echo echo) {
  this.count = echo.count;
}
Echo e2 = new Echo(e1);