Javaで変数を変更しても、元の変数は変更されないことを学びました
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
オブジェクトについても同様のことを想定しました。このクラスを考えてみましょう。
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;
}
}
このコードを試した後、混乱しました。
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
オブジェクトのいずれかを変更すると、他のオブジェクトに影響する理由を説明してください。変数テキストの値は、両方のオブジェクトのメモリ内の同じ場所に格納されていることを理解しています。
変数の値が独立しているのに、オブジェクトに対して相関しているのはなぜですか?
また、単純な割り当てではうまくいかない場合、SomeObjectを複製するにはどうすればよいですか?