Considerações sobre Strings
Talvez a classe String seja uma das 2 ou 3 mais utilizadas da API Java, mas mesmo assim é comum que programados saiam criando “blah,blah,blah”, sem ter idéia do que está acontecendo por baixo dos panos, e consequentemente sem poder tomar as melhores decisões com relação à segurança e performance.
Seguem algumas considerações sobre Strings em Java, cujos conhecimentos são importantes para que programadores tomem suas decisões:
- Uma String é uma cadeia de caracteres. Caracteres em Java são representações no formato UTF-16;
- No código-fonte, uma literal do tipo String é composta por zero ou mais caracteres delimitados por aspas duplas;
- Uma literal do tipo String é sempre compilada como um objeto da classe String;
- Strings com o mesmo conteúdo são na verdade o mesmo objeto. Observe
String a = "Teste", b = "Teste"; System.out.println(a == b);
Irá imprimir “true”, porque a e b são referências ao mesmo objeto;
- Objetos do tipo String são imutáveis. Sempre que uma instrução altera o conteúdo de uma String, ela está na verdade mudando a referência para um objeto recém-criado, ou um reaproveitado (caso o mesmo valor já exista na memória);
- Concatenações entre Strings cujos resultados possam ser inferidos em tempo de compilação são feitas na compilação (entre literais, por exemplo);
- Concatenações entre Strings cujos valores não possam ser conhecidos na compilação, implicam na criação de uma nova instância da classe String;
- A classe java.lang.StringBuilder, é uma sequência de caracteres desenvolvida para ser utilizada por uma única thread;
- A classe java.lang.StringBuffer, é uma sequência de caracteres desenvolvida para que suas instâncias possam ser acessadas e modificadas por várias threads de forma segura.
Leituras interessantes:
- http://pt.wikipedia.org/wiki/UTF-16
- http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5
- http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.3.3
- http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuilder.html
- http://docs.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html
Existem outras coisas importantes para se saber sobre Strings em Java, mas esse é, na minha opinião o pacote básico.
Assuntos
- Arquitetura (1)
- Geral (1)
- Java (5)
- Concorrência (1)
- I/O (1)
- Testes (1)





