这个问题更多的是关于正确的 Java 程序构造。 我想知道:会发生什么
public Clazz {
this.someClazz = new SomeClazz();
} //initialization
Clazz x = y;
上面的构造函数是被执行,还是被跳过,并且 someClazz 成员立即获得一个新值?
最佳答案
您需要区分变量、对象和引用。
x 和 y 的值不是对象 - 它们只是引用。赋值运算符只是将右侧表达式中的值复制到左侧变量。因此,在您的情况下,它将 y 的值复制到 x 中...此时,两个变量的值都引用同一个对象。没有调用任何构造函数或任何其他成员 - 它只是复制一个值。例如:
// Assuming appropriate methods...
x.setFoo("new foo");
System.out.println(y.getFoo()); // Would print "new foo"
但是,这两个变量仍然是独立的:
x.setFoo("new foo");
x = new Clazz();
x.setFoo("yet another foo");
System.out.println(y.getFoo()); // Would print "new foo"
这里,在第二行之后,x
和 y
的值引用不同对象,因此调用 x.setFoo ()
不会更改 y
引用的对象内 foo
的值。
关于Java:在创建时将值传递给对象时,应该初始化的成员会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23333621/