Diferenças nas modificações de objetos

Eu só queria saber se alguém poderia me ajudar com isso:

    StringBuilder s=new StringBuilder("0123456789");
    s.substring(1, 2);
    System.out.println(s);
    s.delete(2, 8);
    System.out.println(s);

o primeiro Sysout fornece 0123456789 (embora eu esperasse uma substring), mas outro Sysout fornece 0189. Notei isso também com algumas classes de Hora e Data. Como posso descobrir quando o formulário modifica o objeto original (neste caso, s ) Isso está relacionado à mutabilidade de objetos? Existe alguma regra geral? Agradecemos antecipadamente HK

questionAnswers(3)

yourAnswerToTheQuestion