Diferencias en modificaciones de objetos

Me preguntaba si alguien podría ayudarme con esto:

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

el primer Sysout da 0123456789 (aunque esperaba una subcadena) pero otro Sysout da 0189. He notado eso también con algunas clases de fecha y hora. ¿Cómo puedo averiguar cuándo qué formulario va a modificar el objeto original? ) ¿Está esto relacionado con la mutabilidad de los objetos? ¿Hay alguna regla general? Gracias de antemano HK

Respuestas a la pregunta(3)

Su respuesta a la pregunta