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.
Passed in SCBCD 5 exam
Há 14 anos
Nenhum comentário:
Postar um comentário