Asignación de objetos Java

Soy nuevo en Java y tengo algunas preguntas en mente con respecto a la asignación de objetos. Por ejemplo,

Test t1 = new Test();
Test t2 = t1;
t1.i=1;

Asumiendo variablei se define dentro de la clase de prueba, tengo derecho a suponer que tanto t1 como t2 apuntan al mismo objeto donde se realiza la modificaciónt1.i=1 afecta a ambost1 yt2? En realidad lo probé y parece que tenía razón. Sin embargo, cuando intento lo mismo enString, la modificación ocurre solo en un lado donde el otro lado no se ve afectado. Cuál es la razón detrás de esto?

Edit: El caso lo intenté con String.

String s1 = "0";
String s2 = s1;          
s1 = "1";
System.out.println(s1);
System.out.println(s2);

Me doy cuenta de mi error al probar los casos en String ya que es inmutable. La situación en la que pensé.s1="1" modificar la cadena es, de hecho, devolver la referencia de "1" a la s1. Sin embargo, mi pregunta permanece. HaceTest t2 = t1; ¿Porque tanto t2 como t1 apuntan al mismo objeto o cada uno tiene ahora sus propios objetos? ¿Esta situación se aplica a todos los objetos en Java?

Respuestas a la pregunta(6)

Su respuesta a la pregunta