Ich bin mir nicht sicher, wie das neue Schlüsselwort in Java funktioniert. Ist es sicher, dass jedes Mal, wenn ich das neue Schlüsselwort verwende, ein neues Objekt auf dem Haufen erzeugt wird?
Die Anweisung Mixer m3 = new Mixer(m2); ruft einen Konstruktor auf, der kein neues Objekt erzeugt. Es wurde also kein neues Objekt erstellt?
Welche Variable bezieht sich außerdem am Ende des Programms auf welches Objekt, d. h. bis wir eine NullPointerException für die Variable m5 erhalten?
Laut dieser Website bewirkt "neu" die Erstellung eines neuen Objekts.
Andererseits kann der Compiler eine Escape-Analyse durchführen, um festzustellen, ob das Objekt wirklich zur Laufzeit auf dem Heap erstellt werden muss. Ist das richtig?
Java:
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 "); }
}
Welche Variable bezieht sich außerdem am Ende des Programms auf welches Objekt, d. h. bis wir eine NullPointerException für die Variable m5 erhalten?
Laut dieser Website bewirkt "neu" die Erstellung eines neuen Objekts.
Andererseits kann der Compiler eine Escape-Analyse durchführen, um festzustellen, ob das Objekt wirklich zur Laufzeit auf dem Heap erstellt werden muss. Ist das richtig?