Atribuição de objeto Java

Eu sou novo em Java e tenho algumas dúvidas em relação à atribuição de objetos. Por exemplo,

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

Assumindo a variáveli está definido dentro da classe Test, estou certo em assumir que tanto o T1 quanto o T2 apontam para o mesmo objeto onde a modificaçãot1.i=1 afeta tantot1 et2? Na verdade eu testei e parece que eu estava certo. No entanto, quando eu tento a mesma coisaString, a modificação acontece apenas em um lado onde o outro lado não é afetado. Qual é a razão por trás disso?

Edit: O caso que eu tentei com String.

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

Eu percebo o meu erro, testando os casos em String, uma vez que é imutável. A situação em que penseis1="1" modificar a string está, de fato, retornando a referência de "1" para o s1. No entanto, minha pergunta permanece. FazTest t2 = t1; porque tanto o t2 quanto o t1 apontam para o mesmo objeto ou cada um agora tem seus próprios objetos? Esta situação se aplica a todos os objetos em Java?

questionAnswers(6)

yourAnswerToTheQuestion