devterview_$ iniciar simulação

String imutável, o pool e `StringBuilder`

FácilJúniorFundamentos da linguagem

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.

#string#imutabilidade#stringbuilder#string-pool
publicidade

Perguntas de acompanhamento

Relacionadas