Junior
Wat is een string pool in Java?
sobes.tech AI
Antwoord van AI
String pool is een speciaal geheugengebied in de heap van Java, waar string literals en geïnterneerde strings worden opgeslagen. Het belangrijkste doel is geheugenbesparing door hergebruik van dezelfde stringwaarden.
Hoe werkt het:
Wanneer een string literal wordt gemaakt (bijvoorbeeld "hallo"), controleert de JVM eerst of er al een string met die waarde in de string pool bestaat.
- Als de string bestaat: geeft de JVM een verwijzing naar het bestaande object in de pool, in plaats van een nieuw te maken.
- Als de string niet bestaat: maakt de JVM een nieuw
Stringobject in de pool en geeft een verwijzing ernaar.
String creatie en pool:
- Met behulp van een string literal:
// "hallo" is een string literal String s1 = "hallo"; String s2 = "hallo"; // s1 en s2 verwijzen naar hetzelfde object in de string pool - Met de constructor
new String():String s3 = new String("wereld"); String s4 = new String("wereld"); // s3 en s4 verwijzen naar verschillende objecten in het heap, ook al hebben ze dezelfde waarde. // Het string literal "wereld" kan in de pool staan, maar s3 en s4 bevinden zich erbuiten. - Met de methode
intern():String s5 = new String("java"); // De intern() methode controleert of er al een string met deze waarde in de pool bestaat String s6 = s5.intern(); // Als dat zo is, geeft het de verwijzing naar het object in de pool // Zo niet, voegt het de huidige string toe aan de pool en geeft die referentie
Voordelen van de string pool:
- Geheugensbesparing: Vermindert het aantal dubbele string-objecten.
- Prestaties: Vergelijking van string literals (
==) kan sneller zijn dan het vergelijken vanStringobjecten metequals(), als beide verwijzen naar hetzelfde object in de pool.
Belangrijke opmerking:
Het vergelijken van strings met de operator == controleert of twee variabelen naar hetzelfde object verwijzen. Voor inhoudsvergelijking van strings, gebruik altijd de equals() methode.
String str1 = "abc"; // In de pool
String str2 = "abc"; // In de pool, dezelfde referentie
String str3 = new String("abc"); // Buiten de pool
String str4 = str3.intern(); // In de pool, dezelfde referentie als str1 en str2
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1 == str4); // true
System.out.println(str1.equals(str3)); // true