Fordi String objekter er uforanderlige, en delstreng operation gør ikke brug for at kopiere hele underliggende sekvens af tegn. I stedet kan en delstreng bruge samme char array som den oprindelige streng, og blot henvise til et andet startpunkt og slutpunkt i char array. Det betyder, at understrengsgrænser operationer er effektive, at være både hurtig og bevare hukommelse; den ekstra objekt er blot en wrapper på samme underliggende char array med forskellige pejlemærker i denne array.3.
Strenge gennemføres i JDK som en intern char array med indeks forskydninger (faktisk en start offset og en karakter tæller). Denne grundlæggende struktur er ekstremt usandsynligt, at blive ændret i en hvilken som helst version af Java.4. Strenge har stærk støtte til internationalisering. Det ville tage en stor indsats for at gengive internationalisering støtte til en alternativ class.5. Det tætte forhold til StringBuffers tillader Strings til henvisning til den samme char array bruges af StringBuffer. Dette er et tveægget sværd.
For typiske praksis, når du bruger en StringBuffer at manipulere og tilføje tegn og datatyper, og derefter konvertere det endelige resultat til en String, det fungerer fint. Den StringBuffer giver effektive mekanismer til dyrkning, indsætter tilføje, ændre og andre typer af String manipulation. Den resulterende String derefter effektivt referencer samme char array med uden ekstra karakter kopiering. Dette er meget hurtig og reducerer antallet af genstande, der anvendes til et minimum ved at undgå mellemliggende objekter.
Men hvis StringBuffer objektet efterfølgende ændres, er char array i denne StringBuffer kopieret ind i en ny char array, der nu refereres af StringBuffer. String objekt bevarer henvisningen til den tidligere delte char array. Det betyder, at kopiering hovedet kan forekomme på uventede steder i ansøgningen. I stedet for kopieringen sker på toString () metode opkald, som man kunne