Recomendado, 2024

Escolha Do Editor

Diferença entre String e StringBuffer Class em Java

String e StringBuffer ambos são as classes que operam em seqüências de caracteres. A classe StringBuffer é a classe peer da classe String. O objeto da classe String é de tamanho fixo. O objeto da classe StringBuffer é expansível. A diferença básica entre String e StringBuffer é que o objeto da classe “String” é imutável . O objeto da classe "StringBuffer" mutável .

Gráfico de comparação

Base para ComparaçãoCordaStringBuffer
BasicO comprimento do objeto String é fixo.O comprimento do StringBuffer pode ser aumentado.
ModificaçãoObjeto String é imutável.O objeto StringBuffer é mutável.
atuaçãoÉ mais lento durante a concatenação.É mais rápido durante a concatenação.
MemóriaConsome mais memória.Consome menos memória.
ArmazenamentoString constante pool.Memória heap.

Definição de String

"String" é uma classe em Java. O objeto da classe String é de comprimento fixo e, o mais importante a ser lembrado, o objeto da classe String é “imutável”. Depois de inicializar o objeto String, você não poderá modificar esse objeto novamente. O objeto da classe String é armazenado no conjunto constante de cadeias.

Vamos primeiro entender isso, sempre que você criar qualquer string; você cria um objeto do tipo string. As constantes de string também são objetos de string.

 System.out.println ("Olá, esta é a solução da Teckpix"); 

Na declaração acima, a string “Olá, esta é a Teckpix Solution” é uma constante de String.

Agora vamos entender a mutabilidade do objeto String com a ajuda de um exemplo.

 String str = new String ("Teckpix"); str.concat ("Solution"); system.out.println (str); // saída Teckpix 

No código acima, tentei concatenar as duas strings “Teckpix” e “Solution”. Como sabemos sempre que uma string é criada, isso significa que o objeto do tipo String é criado. Assim, a string “Teckpix” cria um objeto, cuja referência é atribuída ao objeto string “str”. Em seguida, tentei concatenar outra string “Solução” com a string “Teckpix” usando o método “concat ()” da classe String.

Como os objetos String são imutáveis, nenhuma modificação é feita na string “Teckpix” e a nova string “Solution” cria um outro objeto no conjunto constante de strings. Porém, a referência ao objeto “Solução” não é capturada por nenhum objeto, portanto, a referência ao objeto Solução é perdida, embora ainda esteja presente no conjunto constante de cadeias. Como nenhuma modificação é feita no objeto Teckpix, quando eu imprimir o objeto str para o qual eu atribuí a referência do Teckpix anteriormente, irá imprimir a string “Teckpix” somente.

Definição de StringBuffer

A classe "StringBuffer" é a classe de mesmo nível da classe "String". A classe StringBuffer fornece mais funcionalidade para as seqüências de caracteres. O objeto da classe StringBuffer é mutável, ou seja, seu objeto pode ser modificado. O comprimento do objeto StringBuffer é expansível. Você pode inserir os caracteres ou substrings no meio da string literal que é atribuída ao objeto StringBuffer ou no final dele. StringBuffer aloca espaço para 16 caracteres adicionais quando nenhum comprimento específico é solicitado.

Vamos entender a mutabilidade do objeto StringBuffer com a ajuda de um exemplo:

 StringBuffre Sb = new StringBuffer ("Teckpix"); Sb.append ("Solução"); system.out.println (Sb); // Output Teckpix Solution 

Como sabemos, o objeto StringBuffer é mutável. O método append () modifica o objeto StringBuffer Sb ao qual, inicialmente, a referência do objeto “Teckpix” é atribuída anteriormente. O método append () acrescenta a nova string literal “Solution”, ao final da string literal “Teckpix”. Agora, quando eu imprimir o objeto Sb, ele imprimirá o objeto de string modificado “Teckpix Solutions”.

Diferença chave entre String e StringBuffer

  1. O comprimento do objeto String é fixo, mas o comprimento de um objeto de StringBuffer pode ser aumentado quando necessário.
  2. O objeto String é imutável, isto é, seu objeto não pode ser reatribuído novamente, enquanto o objeto StringBuffer é mutável.
  3. O objeto String é mais lento no desempenho, enquanto o objeto StringBuffer é mais rápido.
  4. O objeto String consome mais memória, enquanto os objetos StringBuffer consomem menos memória.
  5. Os objetos String são armazenados em um pool constante, enquanto os objetos StringBuffer são armazenados na memória heap.

Conclusão:

Objetos StringBuffer fornecem mais funcionalidade para as seqüências de caracteres em comparação com a classe String. Portanto, é preferível trabalhar com StringBuffer em vez da classe String.

Top