new
キーワードがJavaでどのように動作するかわかりません。キーワードを使用するたびnew
に、新しいオブジェクトがヒープ上に作成されるのは確実ですか?
次の例を勉強していたときに、この疑問が生じました-
class Mixer {
Mixer() { }
Mixer(Mixer m) { m1 = m; }
Mixer m1;
public static void main(String[] args) {
Mixer m2 = new Mixer();
Mixer m3 = new Mixer(m2); // Does it create any new mixer object?
m3.go();
Mixer m4 = m3.m1; m4.go();
Mixer m5 = m2.m1; m5.go();
}
void go() { System.out.print("hi "); }
}
この行Mixer m3 = new Mixer(m2);
は、新しいオブジェクトを作成しないコンストラクターを呼び出します。では、新しいオブジェクトが作成されなかったということですか?
また、どの変数がプログラムの最後でどのオブジェクトを参照するか、つまりNullPointerExcetion
variable を取得するまでm5
。