Fordi String objekter er uforanderlige, en delstreng operasjon doesnt trenger å kopiere hele underliggende sekvens av tegn. I stedet kan en delstreng bruke samme røye array som den opprinnelige strengen og bare referere til et annet startpunkt og endepunkt i røye array. Dette betyr at treng operasjoner er effektive, er både rask og bevaring av minne; den ekstra objektet er bare en wrapper på samme underliggende sjørøye rekke med ulike pekere til at array.3. Strenger er implementert i JDK som en intern char array med indeks forskyvninger (faktisk en start utlignet og et tegn teller).
Denne grunnleggende strukturen er svært lite sannsynlig å bli endret i noen versjon av Java.4. Strenger har sterk støtte for internasjonalisering. Det ville ta en stor innsats for å gjenskape internasjonalisering støtte for en alternativ class.5. Det nære forholdet til StringBuffers tillater Strings å referere til samme røye array brukes av Stringbuffer. Dette er et tveegget sverd. For typiske praksis, når du bruker en Stringbuffer til å manipulere og legge figurer og datatyper, og deretter konvertere det endelige resultatet til en String, fungerer dette helt fint.
The Stringbuffer gir effektive mekanismer for å vokse, sette inn, tilføye, endre, og andre typer String manipulasjon. Den resulterende String så effektivt referanser samme char array med uten ekstra karakter kopiering. Dette er svært rask og reduserer antallet objekter som brukes til et minimum ved å unngå mellomliggende stedene. Men hvis Stringbuffer objektet blir deretter endret, blir trekullet matrisen ved at String kopiert inn i en ny matrise røye som nå refereres til av Stringbuffer. The String objekt beholder henvisningen til tidligere delte char array.
Dette betyr at kopiering overhead kan oppstå på uventede punkter i søknaden. I stedet for kopieringen skjer på toString () metodekallet, som forventet, en hvilken som helst etterfølgende endring av Stringbuffer forårsaker en ny