Em Java, String, StringBuffer e StringBuilder são frequentemente usados classes de string na programação. A diferença entre eles também é uma pergunta que geralmente é feita em entrevistas. Agora resuma e veja como eles são diferentes e iguais.
1. Variável e imutável
A classe String usa uma matriz de caracteres para salvar strings, como segue: como existe um modificador "final", você pode saber que os objetos da string são imutáveis.
Valor de char final privado [];
Tanto o StringBuilder quanto o StringBuffer são herdados da classe AbstractStringBuilder. No AbstractStringBuilder, as matrizes de personagens são usadas para salvar strings. Como segue, pode -se observar que ambos os objetos são mutáveis.
Char [] valor;
2. É multi-thread e seguro?
Os objetos na string são imutáveis, para que possam ser entendidos como constantes, que são obviamente seguros de threads.
AbstractStringBuilder é uma classe pública de pais do StringBuilder e StringBuffer, que define algumas operações básicas de strings, como expansão de capacidade, anexar, inserir, indexOF e outros métodos públicos.
O StringBuffer adicionou um bloqueio de sincronização ao método ou um bloqueio de sincronização ao método chamado, para que seja seguro. Veja o seguinte código -fonte:
public sincronizado stringbuffer reverse () {super.Reverse (); return this;} public int indexOf (string str) {return indexof (str,); // Existe um método público sincronizado INT (String str, int a partir de Index)} O StringBuilder não adiciona bloqueios de sincronização ao método, por isso não é segura.
3. Stringbuilder e StringBuffer em comum
StringBuilder e StringBuffer têm classes de pais públicas AbstractStringBuilder (classe abstrata).
Uma das diferenças entre classes abstratas e interfaces é que alguns métodos públicos de subclasses podem ser definidos em classes abstratas. As subclasses precisam apenas adicionar novas funções e não precisam repetir os métodos existentes; enquanto as interfaces definem apenas métodos e constantes.
Os métodos do StringBuilder e StringBuffer chamarão de métodos públicos no AbstractStringBuilder, como Super.append (...). É apenas que o StringBuffer adicionará uma palavra -chave sincronizada ao método e a sincroniza.
Finalmente, se o programa não for multi-thread, o uso do StringBuilder será mais eficiente que o StringBuffer.
Resumo da diferença entre String StringBuffer StringBuilder em Java
* A classe String é uma classe imutável. Enquanto a string for modificada, novos objetos serão gerados.
* StringBuffer e StringBuilder são classes mutáveis e nenhum novo objetivo é gerado por quaisquer alterações nas strings.
Ao usá -lo na prática, se você costuma precisar modificar uma string, como inserção, exclusão etc.
* Mas qual é a diferença entre StringBuffer e StringBuilder?
O StringBuffer é seguro para threads e é muito conveniente de usar em programas com vários threads, mas a eficiência do programa será mais lenta.
O StringBuilder não é seguro para threads e é mais eficiente que o StringBuffer em um único thread.
* Em geral, o tempo de execução dos três:
String> StringBuffer> StringBuilder