在Java中,构造函数链会创建多个对象吗?

3

如果我使用“this”关键字调用同一类的另一个构造函数,会创建两个对象吗?

如果是这样,下面的例子中哪个对象将处于活动状态:

Class Sample {
    int a;
    String b;

    Sample() {
        this("Hello");
        a=10;
    }

    Sample(String temp) {
        b = temp;
    }    
}

我想了解构造函数链的行为。请解释一下它是如何工作的?

3个回答

9
不,构造函数链不会创建额外的实例,它只是执行链接构造函数的逻辑,让你可以重用其代码。

感谢您的输入。这意味着它与调用另一个方法相同。 - Raashith
1
@user3232754 不完全相同。对其他构造函数的调用必须是你的构造函数中的第一行,而其他构造函数会隐式地调用超类的构造函数。此外,只能从构造函数中进行此调用。如果它像任何其他方法一样,您可以从任何方法中调用它。 - Eran

2

不会this("Hello"); 会调用 Sample(String temp) 构造函数,而不会创建另一个对象。


1

就像其他人所提到的,你将只会得到一个对象,每个构造函数都会初始化同一个对象。

最好自己去看一下:

public class Sample {
    int a;
    String b;

    Sample() {
        this("Hello");
        a=10;
        System.out.println("B: "+ hashCode());
    }

    Sample(String temp) {
        b = temp;
        System.out.println("A: "+ hashCode());
    }

    public static void main(String[] args) {
        new Sample();
    }

}

请注意,在未完全初始化的对象上调用实例方法可能会导致问题,如果您尝试访问未初始化的字段,请小心处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接