Ho creato una classe chiamata Test
con un costruttore e una variabile di istanza String name
:
class Test {
String name;
Test(String name){
this.name = name;
}
}
L'ho istanziato in questo modo:
Test first = new Test("First");
Test second = first;
first.name = "Change First";
System.out.println("First: " + first.name);
System.out.println("Second: " + second.name);
... e prevedibilmente ottieni questo:
First: Change First
Second: Change First
Questo ha senso per me. Sto assegnando il secondo oggetto alla stessa locazione di memoria referenziata nel primo - quando cambio il primo, il secondo cambia e viceversa.
Prendi questo:
String x = new String("Hello");
String y = x;
x = new String("Change");
System.out.println("x: " + x);
System.out.println("y: " + y);
Quanto sopra fornisce l'output:
x: Change
y: Hello
Perché è questo? Entrambi stanno estendendo la classe Object
, quindi perché si comportano in modo così diverso? Qualche altra derivata di Object
si comporta in questo modo?