Java Academy · Les

Waarom strings onveranderlijk zijn

Begrijp de onveranderlijkheid van strings

Les 1 van 413 stappen

Waarom strings onveranderlijk zijn is een gratis Java Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Tekenreeksen kunnen niet veranderen

In Java is een String onveranderlijk: zodra deze is gemaakt, kunnen de tekens nooit meer veranderen. Elke methode die een tekenreeks lijkt te wijzigen, retourneert in werkelijkheid een volledig nieuwe tekenreeks.

Methoden retourneren nieuwe tekenreeksen

toUpperCase(), replace() en vergelijkbare methoden wijzigen het origineel niet. Ze maken een nieuwe String en laten het origineel onaangeroerd.

public class Main {
    public static void main(String[] args) {
        String original = "hello";
        String upper = original.toUpperCase();
        System.out.println("original: " + original);
        System.out.println("upper: " + upper);
    }
}

Opnieuw toewijzen is geen wijziging

Wanneer je s = s + "!" schrijft, verwijst de variabele nu naar een nieuwe tekenreeks. Het oude tekenreeksobject blijft ongewijzigd en kan door de garbagecollector worden opgeruimd.

public class Main {
    public static void main(String[] args) {
        String s = "hi";
        String firstRef = s;
        s = s + "!";
        System.out.println("s: " + s);
        System.out.println("firstRef: " + firstRef);
    }
}

Waarom onveranderlijkheid?

Onveranderlijkheid biedt echte voordelen:

  • Threadveiligheid: tekenreeksen kunnen zonder vergrendelingen worden gedeeld
  • Caching: hashcodes en items in de pool blijven geldig
  • Beveiliging: een tekenreeks die aan een methode wordt doorgegeven, kan niet buiten je medeweten worden gewijzigd

De stringpool

Identieke stringliteralen kunnen één object in de stringpool delen. Dat is alleen veilig omdat tekenreeksen nooit veranderen. Hier verwijzen twee literalen naar hetzelfde object in de pool.

public class Main {
    public static void main(String[] args) {
        String a = "java";
        String b = "java";
        System.out.println(a == b);
        System.out.println(a.equals(b));
    }
}

new String doorbreekt pooling

Het gebruik van new String(...) dwingt een afzonderlijk object af, waardoor de gelijkheid van referenties verschilt, ook al komt de inhoud overeen. Vergelijk inhoud altijd met equals.

public class Main {
    public static void main(String[] args) {
        String a = "java";
        String b = new String("java");
        System.out.println("== : " + (a == b));
        System.out.println("equals: " + a.equals(b));
    }
}

De kosten van concatenatie

Elke + op tekenreeksen maakt een nieuw object. Als je dit in een lus doet, worden veel kortlevende tekenreeksen toegewezen, wat tijd en geheugen verspilt.

public class Main {
    public static void main(String[] args) {
        String result = "";
        for (int i = 1; i <= 5; i++) {
            result = result + i;
        }
        System.out.println(result);
    }
}

Kwadratische groei

Omdat elke concatenatie alle vorige tekens kopieert, schaalt het opbouwen van een lange tekenreeks met + in een lus slecht, ongeveer als O(n kwadraat). Dit is het belangrijkste prestatieprobleem.

public class Main {
    public static void main(String[] args) {
        String s = "";
        for (int i = 0; i < 1000; i++) {
            s += "x";
        }
        System.out.println("Length: " + s.length());
    }
}

Onveranderlijke waarden zijn voorspelbaar

Een tekenreeks aan een methode doorgeven is veilig: de methode kan jouw kopie niet wijzigen. Hier maakt de methode een nieuwe tekenreeks en blijft de waarde van de aanroeper intact.

public class Main {
    static void shout(String s) {
        s = s + "!!!";
        System.out.println("inside: " + s);
    }
    public static void main(String[] args) {
        String msg = "hello";
        shout(msg);
        System.out.println("outside: " + msg);
    }
}

Vooruitblik op de oplossing

Wanneer je tekenreeksen efficiënt moet opbouwen, biedt Java StringBuilder, een veranderlijke begeleidende klasse. Deze wijzigt de inhoud rechtstreeks in plaats van telkens nieuwe objecten toe te wijzen.

public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= 5; i++) {
            sb.append(i);
        }
        System.out.println(sb.toString());
    }
}

De twee benaderingen vergelijken

Voor een paar concatenaties is + prima en goed leesbaar. Voor veel concatenaties in een lus geef je de voorkeur aan StringBuilder. Kies op basis van hoeveel tekst je opbouwt.

public class Main {
    public static void main(String[] args) {
        String simple = "a" + "b" + "c";
        StringBuilder sb = new StringBuilder("a");
        sb.append("b").append("c");
        System.out.println(simple);
        System.out.println(sb);
    }
}

Korte controle

Wat gebeurt er werkelijk wanneer je s.toUpperCase() aanroept op een String?

Samenvatting

Je hebt geleerd waarom tekenreeksen onveranderlijk zijn:

  • De inhoud van een String verandert nooit
  • Methoden retourneren nieuwe tekenreeksen
  • Onveranderlijkheid maakt threadveiligheid, pooling en beveiliging mogelijk
  • Concatenatie met + in lussen schaalt slecht
  • StringBuilder is de veranderlijke oplossing
Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “Waarom strings onveranderlijk zijn” gratis?

Ja — de volledige tekst van “Waarom strings onveranderlijk zijn” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “Waarom strings onveranderlijk zijn”?

Begrijp de onveranderlijkheid van strings Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Waarom strings onveranderlijk zijn”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Waarom strings onveranderlijk zijn
  2. Strings bouwen met StringBuilder
  3. StringBuilder-methoden
  4. StringBuilder versus StringBuffer
← Terug naar Java Academy