Java:在创建时将值传递给对象时,应该初始化的成员会发生什么?

标签 java constructor initialization

这个问题更多的是关于正确的 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"

这里,在第二行之后,xy 的值引用不同对象,因此调用 x.setFoo () 不会更改 y 引用的对象内 foo 的值。

关于Java:在创建时将值传递给对象时,应该初始化的成员会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23333621/

相关文章:

java - 如何每行打印15个数字?

java - 任何使用 ActiveMQ 多播的人

java - 如何仅在至少创建了一个实例时才初始化静态变量

java - java.lang.SecurityManager 中的初始化字段有什么用?

cocoa - 将背景颜色设置为 NSView

java - 如何在另一个模态 JDialog 之上创建一个模态 JDialog

java - 在命令行中将环境变量传递给 java 类

java - 在调用父类(super class)构造函数方法之前检查子类中的条件

c++ - 以任意顺序传递参数的构造函数排列

c++ - 无法在 C++ 类中创建构造函数