Я узнал, что когда вы изменяете переменную в 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, если простое присваивание не выполняет работу?