Você sempre pode verificar seu compilador (por exemplo, por algumas declarações envolvendo decompiling concatenação) e alterá-lo se necessário2. Porque objetos String são imutáveis, uma operação does not substring precisa copiar toda a seqüência de caracteres subjacente. Em vez disso, uma sub pode usar a mesma matriz de char como a string original e simplesmente se referir a um ponto de partida diferente e ponto final na matriz de char.
Isto significa que as operações de substring são eficientes, sendo rápido e conservação da memória; o objeto extra é apenas um invólucro no mesmo caractere matriz subjacente com diferentes ponteiros para que array.3. Strings são implementados no JDK como uma matriz de char interna com deslocamentos de índice (na verdade um deslocamento de início e uma contagem de caracteres). Essa estrutura básica é extremamente improvável de ser alterado em qualquer versão do Java.4. Cordas tem forte apoio à internacionalização.
Seria preciso um grande esforço para reproduzir o suporte de internacionalização para um class.5 alternativa. A estreita relação com StringBuffers permite cordas para fazer referência à mesma matriz de char usado pelo StringBuffer. Esta é uma faca de dois gumes. Para a prática típica, quando você usa um StringBuffer para manipular e acrescentar personagens e tipos de dados, e em seguida, converter o resultado final de uma String, isso funciona muito bem. O StringBuffer fornece mecanismos eficientes para o cultivo, inserindo, acrescentando, alterando, e outros tipos de manipulação de cadeia.
A cadeia resultante, em seguida, faz referência de forma eficiente a mesma matriz de char com nenhuma cópia caráter extra. Isto é muito rápido e reduz o número de objectos a serem usados para um mínimo, evitando objetos intermediários. No entanto, se o objeto StringBuffer sendo posteriormente alterada, a matriz de char em que StringBuffer é copiado para uma nova matriz de char que agora é referenciado pelo StringBuffer.
O objeto String mantém a referência à matriz de char anteriorment