假设我在一个类中有三个构造函数:
public class MyClass {
Parent thingA;
Child thingB;
boolean someBoolean;
double someDouble;
double anotherDouble;
public MyClass(Parent thingA, boolean someBoolean) {
this(thingA, someBoolean, 0.25);
}
public MyClass(Child thingB, boolean someBoolean, double anotherDouble) {
// Casting to prevent recursive constructor call
this((Parent) thingB, someBoolean, 0.5);
this.thingB = thingB;
this.anotherDouble = anotherDouble;
}
public MyClass(Parent thingA, boolean someBoolean, double someDouble) {
this.thingA = thingA;
this.someBoolean = someBoolean;
this.someDouble = someDouble;
}
}
Child
扩展Parent
的位置。我的问题是,当我通过this(...)
从Java中的构造函数调用另一个构造函数时,我是按引用传递还是按值传递?投射如何影响它?如果我要使用第二个构造函数并修改ThingB的属性,那会反映在ThingA中吗?
编辑:我同时拥有thingA和thingB字段,因为有时我的类将在没有Child
实例的情况下使用,但是当使用Child
时,我需要利用{{ 1}}。
答案 0 :(得分:-2)
在Java中,所有对象(非基本类型)均通过引用传递。投射对此行为没有影响。如果这不是您想要的,则可以创建对象的副本(您需要自己实现此行为,通常以方法或构造函数的形式实现),然后传递该副本。