Imutabilidade de String

Desde a versão 1.5 do Java SE, a classe tornou-se imutável. Cada vez que um valor é atribuido a um objeto String a máquina virtual cria um objeto novo, contudo a referência é mantida. Em situações de concatenação de Strings ou de atribuição, a Máquina Virtual cria um objeto novo, o que é muito custoso. Inicialmente, fiquei triste por ser assim. Entretando, duas novas foram criadas para armazenar Strings de uma maneira mutável.

A StringBuilder e StringBuffer. Este é similar ao primeiro, contudo é Thread-Safe e obviamente mais lento devido ao controle de sincronização.

O código em http://phpfi.com/331387, foi feito para comparar desempenho entre StringBuilder e String.

Abaixo, a saída do programa em ms:
Tempo para atribuicao em String: 16
Tempo para concatenaco em String: 660531
Tempo para atribuicao em StringBuilder: 31
Tempo para concatenao em StringBuilder: 32

Incrível!!
Atribuição em String é mais veloz. Mas a concatenação é extremamente lenta.

Porque?
Seja String str += new String("aaa");

Ele cria uma objeto com "aaa" e cria mais com o valor antigo de str. Para fazer uma concatenação foram criados dois objetos.

Gostaria muito de ver a implementação destas classes.

Espero que tenham gostado e aguardem o próximo tópico. Como Java cria objetos.

Nenhum comentário:

Ratings:

Avaliação deste artigo

Copyright © Programming @ home