Eftersom String objekt är oföränderliga, en träng operation behöver inte till kopiera hela underliggande sekvensen av tecken. I stället kan en träng använda samma char array som den ursprungliga strängen och bara hänvisa till en annan startpunkt och slutpunkt i char array. Detta innebär att träng verksamhet är effektiv, att vara både snabb och konserverande av minne; det extra objektet är bara ett omslag på samma underliggande röding array med olika pekare till det array.3.
Strängar genomförs i JDK som en intern röding array med indexförskjutningar (egentligen en start offset och en antal tecken). Denna grundläggande struktur är ytterst osannolikt att ändras i någon version av Java.4. Strängar har ett starkt stöd för internationalisering. Det skulle ta en stor insats för att återskapa internationalisering stöd för en alternativ class.5. Den nära relationen med StringBuffers gör strängar att referera till samma char array som används av String. Detta är ett dubbeleggat svärd.
För typiska praxis, när du använder en String att manipulera och lägga tecken och datatyper, och sedan omvandla det slutliga resultatet till en sträng, detta fungerar alldeles utmärkt. Den String erbjuder effektiva mekanismer för odling, sätter lägga, ändra, och andra typer av String manipulation. Den resulterande String sedan effektivt refererar samma char array utan extra karaktär kopiering. Detta är mycket snabb och minskar antalet objekt som används till ett minimum genom att undvika mellan föremål.
Om emellertid String objektet därefter ändras, är den char array av att String kopieras till en ny char array som nu hänvisas till av String. String-objektet behåller hänvisningen till den tidigare delade char array. Detta innebär att kopiering overhead kan ske vid oväntade punkter i programmet. I stället för den kopiering uppträder vid metoden toString () anrop, som kan förväntas, varje efterföljande ändring av String orsakar