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的wikiclone()
的第一段开始:
在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);