Sobes.tech
Junior

Vertel me over de String-klasse in de programmeertaal Java.

sobes.tech AI

Antwoord van AI

De klasse String in Java vertegenwoordigt een onveranderlijke reeks tekens.

Belangrijkste kenmerken en eigenschappen:

  • Onveranderlijkheid: Na het maken van een String-object kan de inhoud niet worden gewijzigd. Elke operatie die de string lijkt te wijzigen (bijvoorbeeld concatenatie) creëert in feite een nieuw String-object. Dit verbetert de veiligheid en threadveiligheid.
  • Overbelasting van de +-operator: Voor strings is de +-operator overbelast om concatenatie uit te voeren.
  • Twee manieren van creëren:
    • Met een stringliteraal: String s1 = "Hello"; - gemaakt in de stringpool.
    • Met de new-operator: String s2 = new String("World"); - gemaakt op de heap, kan zelfs een nieuw object maken, zelfs als hetzelfde literale al in de pool bestaat.
  • Stringpool: Gebied op de heap waar stringliteralen worden opgeslagen voor geheugenoptimalisatie. Bij het maken van een stringliteraal controleert de JVM eerst de pool. Als de string al bestaat, wordt een verwijzing naar dat object geretourneerd. Zo niet, wordt een nieuw object gemaakt en aan de pool toegevoegd.
  • Handige belangrijke methoden:
    • length(): Geeft de lengte van de string.
    • charAt(int index): Geeft het teken op de opgegeven index.
    • substring(int beginIndex, int endIndex): Geeft een substring.
    • contains(CharSequence s): Controleert of de string de opgegeven tekenreeks bevat.
    • indexOf(int ch) / indexOf(String str): Geeft de eerste positie van de aanwezigheid van het teken of de substring.
    • equals(Object anObject): Vergelijkt de inhoud van de strings. Het is belangrijk om equals() te gebruiken voor inhoudsvergelijking, niet ==, dat verwijzingen vergelijkt.
    • equalsIgnoreCase(String anotherString): Vergelijkt strings zonder rekening te houden met hoofdlettergebruik.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Vervangt tekens of substrings.
    • trim(): Verwijdert spaties aan het begin en einde.
    • split(String regex): Verdeelt de string in substrings op basis van de scheidingsteken.

Voorbeeld van maken en enkele operaties:

// Maken met literaal
String str1 = "Java";

// Maken met new
String str2 = new String("Java");

// Concatenatie
String str3 = str1 + " is amazing";

// Inhoud vergelijken (gebruik `equals`, niet `==`)
boolean areEqualContent = str1.equals(str2); // true

// Verwijzingen vergelijken (gebruik `==`)
boolean areEqualReference = (str1 == str2); // false

// Lengte van de string
int length = str3.length();

// Teken ophalen
char firstChar = str1.charAt(0); // 'J'

// Inhoud controleren
boolean containsIs = str3.contains("is"); // true

De onveranderlijkheid van String kan leiden tot inefficiënties bij herhaalde modificaties van de string, omdat telkens een nieuw object wordt gemaakt. Voor dergelijke scenario's is het beter om StringBuilder of StringBuffer te gebruiken.