Ich habe gelernt, dass beim Ändern einer Variablen in Java die Variable, auf der sie basiert, nicht geändert wird
int a = new Integer(5);
int b = a;
b = b + b;
System.out.println(a); // 5 as expected
System.out.println(b); // 10 as expected
Ähnliches habe ich für Objekte angenommen. Betrachten Sie diese Klasse.
public class SomeObject {
public String text;
public SomeObject(String text) {
this.setText(text);
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Nachdem ich diesen Code ausprobiert hatte, war ich verwirrt.
SomeObject s1 = new SomeObject("first");
SomeObject s2 = s1;
s2.setText("second");
System.out.println(s1.getText()); // second as UNexpected
System.out.println(s2.getText()); // second as expected
Bitte erklären Sie mir, warum sich das Ändern eines der Objekte auf das andere auswirkt. Ich verstehe, dass der Wert von variablem Text für beide Objekte an derselben Stelle im Speicher gespeichert ist.
Warum sind die Werte für Variablen unabhängig, aber für Objekte korreliert?
Wie kann man SomeObject duplizieren, wenn eine einfache Zuweisung nicht ausreicht?