Sobes.tech
Junior

Quais são as diferenças entre StringBuilder e StringBuffer em Java?

sobes.tech IA

Resposta da IA

A principal diferença é que StringBuffer é seguro para threads, enquanto que StringBuilder não é.

  • StringBuffer: Todos os seus métodos são sincronizados (synchronized). Isto garante segurança ao trabalhar com múltiplos threads simultaneamente, garantindo que apenas um thread possa executar um método de cada vez. No entanto, isto também reduz o desempenho devido aos custos adicionais de sincronização.

  • StringBuilder: Os métodos não são sincronizados. Isto torna-o mais rápido que StringBuffer em ambientes de thread único. Quando usado por múltiplos threads sem sincronização externa, podem ocorrer resultados incorretos, pois as operações podem entrelaçar-se.

Quando usar:

  • Use StringBuilder em aplicações de thread único ou quando a segurança de threads é garantida a um nível superior. É mais rápido.
  • Use StringBuffer em aplicações multithread onde vários threads podem modificar simultaneamente o mesmo objeto, e precisa de segurança incorporada.

Exemplo:

// StringBuilder em ambiente de thread único (preferido)
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
System.out.println(sb.toString()); // Vai imprimir "Hello World"

// StringBuffer em ambiente multithread (mais seguro em acessos concorrentes)
StringBuffer sbf = new StringBuffer();
// Num cenário multithread real, os threads irão aceder ao sbf
sbf.append("Thread ").append(Thread.currentThread().getId());
System.out.println(sbf.toString()); // Vai mostrar algo como "Thread 1" ou "Thread 2" dependendo do thread