Pool de Strings
Nós sabemos que o Java é uma linguagem que se preocupa com perfomance (principalmente da JVM).
Quando criamos uma String da primeira maneira, a partir do momento que criamos ela fica dentro de um container. E se for eventualmente declarada uma String com o mesmo nome, ela irá apontar diretamente para esse container.
Então ao invés de ficar instanciando novas Strings (com new) e alocando esses novos objetos em outro endereço e alocando espaço na memória, a gente só reusa os objetos que estão na Pool de Strings.
Atualizado