String imutável, o pool e `StringBuilder`
Pergunta
Por que `String` é imutável em Java, e por que concatenar strings num loop com `+` é um problema?
Resposta esperada
`String` imutável dá: segurança pra usar como chave de `HashMap` (o hash não muda), compartilhamento seguro entre threads sem cópia, e o 'string pool' — literais iguais podem apontar pro mesmo objeto. O problema do `+` em loop: cada `s = s + x` cria uma String NOVA copiando todo o conteúdo anterior mais `x`; num loop de N iterações isso é O(N²) de cópia e lixo pra o GC. O compilador otimiza um `+` isolado (vira `StringBuilder` por baixo), mas NÃO consegue otimizar o loop porque cada iteração é uma expressão separada. A solução é usar `StringBuilder` explicitamente (buffer mutável, `append` amortizado O(1)), ou `String.join`/`Collectors.joining` / streams pra juntar coleções.
Por que perguntam isso
Pergunta júnior/pleno de Java. Sinal bom: 'o compilador otimiza um + isolado mas não o loop' e citar String.join pra coleções.