Alfabetização em entrevistas: a diferença entre String, StringBuffer e StringBuilder

1. Classe de string

A classe String é a classe string mais básica e comumente usada em Java. Objetos String são imutáveis, uma vez que um objeto String é criado, seu valor não pode ser modificado. Quando um objeto String é modificado, um novo objeto String é realmente criado, enquanto o objeto String original permanece inalterado. Esta propriedade é chamada de "imutabilidade".

Como o objeto String é imutável, um novo objeto String será gerado toda vez que o objeto String for modificado, o que causará muita sobrecarga. Por exemplo, o código a seguir cria três objetos String diferentes:

String str = "hello";
str = str + " world";
System.out.println(str);

No código acima, a primeira linha cria um objeto String e a segunda linha modifica o objeto, criando na verdade um novo objeto String e atribuindo-o à variável str. A terceira linha imprime a string final e a saída é "hello world".

Como a classe String é imutável, usar a classe String gerará muita sobrecarga e reduzirá o desempenho do programa em cenários em que um grande número de modificações de string é necessário. Para resolver esse problema, Java fornece duas classes, StringBuffer e StringBuilder.

Dois, classe StringBuffer

A classe StringBuffer, como a classe String, também é usada para lidar com strings. Ao contrário da classe String, os objetos StringBuffer são mutáveis ​​e podem ser modificados sem a criação de novos objetos.

A classe StringBuffer fornece alguns métodos para modificar a string. Por exemplo, o método append() é usado para adicionar novo conteúdo no final da string; o método insert() é usado para inserir novo conteúdo na posição especificada; o método delete() é usado para excluir o conteúdo na posição especificada, etc.

O código a seguir demonstra como modificar uma string usando a classe StringBuffer:

StringBuffer sb = new StringBuffer("hello");
sb.append(" world");
System.out.println(sb.toString());

No código acima, a primeira linha cria um objeto StringBuffer e inicializa seu valor como "hello". A segunda linha usa o método append() para adicionar novo conteúdo ao final da string. A terceira linha imprime a string final e a saída é "hello world".

Deve-se observar que, como o objeto StringBuffer é mutável, pode haver problemas de segurança de encadeamento ao usar a classe StringBuffer em um ambiente multiencadeado. Para resolver esse problema, o Java fornece a classe StringBuilder.

Três, classe StringBuilder

A classe StringBuilder é muito semelhante à classe StringBuffer e também é usada para lidar com strings variáveis. Diferente da classe StringBuffer, a implementação da classe StringBuilder não é thread-safe, portanto, em um ambiente de thread único, o desempenho da classe StringBuilder é superior ao da classe StringBuffer.

O código a seguir demonstra como modificar uma string usando a classe StringBuilder:

StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
System.out.println(sb.toString());

No código acima, a primeira linha cria um objeto StringBuilder e inicializa seu valor como "hello". A segunda linha usa o método append() para adicionar novo conteúdo ao final da string. A terceira linha imprime a string final e a saída é "hello world".

Deve-se observar que, como o objeto StringBuilder não é thread-safe, podem surgir problemas de segurança de thread ao usar a classe StringBuilder em um ambiente multithread. Portanto, em um ambiente multithread, a classe StringBuffer deve ser usada.

Em quarto lugar, o resumo da diferença

  1. A classe String é imutável. Cada vez que um objeto String é modificado, um novo objeto String é criado. Portanto, em cenários onde um grande número de modificações de string são necessárias, o uso da classe String gerará muito overhead.

  2. As classes StringBuffer e StringBuilder são mutáveis ​​e podem ser modificadas sem criar novos objetos.

  3. A classe StringBuffer é thread-safe enquanto a classe StringBuilder não é thread-safe.

  4. Em um ambiente de thread único, o desempenho da classe StringBuilder é superior ao da classe StringBuffer.

V. conclusão

No desenvolvimento real, a classe de processamento de string apropriada deve ser selecionada de acordo com o cenário específico. Se você precisar modificar muito a string e usá-la em um ambiente multiencadeado, use a classe StringBuffer. Se você precisar fazer modificações extensas em cadeias de caracteres em um ambiente de thread único, deverá usar a classe StringBuilder. Se a string não precisar ser modificada, a classe String deve ser usada.

おすすめ

転載: blog.csdn.net/KRYST4L123/article/details/129927944