Junior
Wat is het verschil tussen het maken van een string met behulp van new String() en het gebruik van een string-literal?
sobes.tech AI
Antwoord van AI
Bij het gebruik van een stringliteraal ("abc"), wordt de string aangemaakt in de String Pool. Als er al een string met dezelfde waarde in de pool bestaat, wordt er een verwijzing naar dat bestaande object teruggegeven. Dit is een optimalisatie om geheugen te besparen.
Bij gebruik van new String("abc"), wordt altijd een nieuw stringobject in de heap aangemaakt, zelfs als er al een string met dezelfde waarde in de pool bestaat.
Voorbeeld:
// Er wordt een stringliteraal "hello" gemaakt. Als deze nog niet in de pool bestaat, wordt hij toegevoegd.
// str1 verwijst naar het object in de pool.
String str1 = "hello";
// Het literale "hello" wordt opnieuw gebruikt. Omdat het al in de pool zit,
// verwijst str2 ook naar hetzelfde object in de pool als str1.
String str2 = "hello";
// Er wordt een nieuw stringobject met de waarde "hello" gemaakt in de heap.
// str3 verwijst naar dit nieuwe object in de heap, niet naar het object in de pool.
String str3 = new String("hello");
// Referentiecontrole:
// str1 en str2 verwijzen naar hetzelfde object in de pool.
System.out.println(str1 == str2); // true
// str1 verwijst naar het object in de pool, str3 naar het nieuwe object in de heap.
System.out.println(str1 == str3); // false
// Waardecontrole:
// Alle strings hebben dezelfde waarde.
System.out.println(str1.equals(str3)); // true
Verschillen in de tabel:
| Criteria | Stringliteraal ("abc") |
new String("abc") |
|---|---|---|
| Plaats van creatie | String Pool | Heap (Heap) |
| Object creatie | Geeft een bestaand object terug of maakt een nieuw object | Maakt altijd een nieuw object aan |
| Geheugenoptimalisatie | Gebruikt de pool efficiënt voor herhalingen | Kan duplicaten maken, minder efficiënt |
Vergelijking van referenties (==) |
Vaak true voor strings met dezelfde waarde |
Altijd false voor strings met dezelfde waarde die apart zijn gemaakt |