Java对象是如何工作的?
为什么它会这样工作。。。(与我的直觉相反)
测试。爪哇:
public class Test {
public TestObject obj1;
public TestObject obj2;
public Test() {
obj1 = new TestObject();
obj1.setInt(1);
obj2 = obj1;
System.out.println("Should be the same: " + obj1.getInt() + ", " + obj2.getInt());
obj1.setInt(2);
System.out.println("Should be different? (2, 1): " + obj1.getInt() + ", " + obj2.getInt());
obj2.setInt(3);
System.out.println("Should be different? (2, 3): " + obj1.getInt() + ", " + obj2.getInt());
}
public static void main(String[] args) {
new Test();
}
}
TestObject。爪哇
public class TestObject {
int integer;
public void setInt(int n) {
integer = n;
}
public int getInt() {
return integer;
}
}
令人惊讶的是,这会导致“两个对象”发生变化,因此“int integer”是相同的
从逻辑上讲(如果我的逻辑有任何意义的话),我会假设将一个对象设置为等于另一个对象是一次性的,并且其中一个对象的任何更改都不会自动更改另一个对象。是否有我遗漏的东西,比如可能只有一个对象有两个引用?还是什么
# 1 楼答案
这两个对象都指向同一个内存对象,因为您已经完成了分配:
无论使用其中一个引用做了什么更改,更改都将对同一个内存对象进行
# 2 楼答案
执行赋值后,
obj1
和obj2
都是对同一对象的引用。那之后呢obj2 = obj1;
两个引用都指向同一个对象;所有结果都应该匹配。如果你想复制,你可以这样做
obj2 = new TestObject(obj1.getInt());
或者创建一个新的构造函数来获取一个实例并创建一个副本(一个更好的API)
# 3 楼答案
对
此代码:
是一个参考赋值。不会复制任何对象
# 4 楼答案
键入obj2=obj1时;您基本上说,obj2和obj1的指针都应该指向同一个内存地址,因此指向同一个对象。 你应该输入: