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