Los objetos de la clase String están diseñados para ser inmutables. en la documentacion de JDK verán que cada método en la clase que aparentemente modifica un String en realidad crea y retorna un objeto String completamente nuevo que contiene la modificación. El String original no se toca para nada.