Sobes.tech
Junior

Porozprávaj mi o triede String v jazyku Java.

sobes.tech AI

Odpoveď od AI

Trieda String v Jave predstavuje nemennú sekvenciu znakov.

Hlavné vlastnosti a charakteristiky:

  • Nemennosť (Immutability): Po vytvorení objektu String jeho obsah nemôže byť zmenený. Akákoľvek operácia, ktorá vyzerá ako modifikácia reťazca (napríklad konkatenácia), v skutočnosti vytvorí nový objekt String. To zvyšuje bezpečnosť a bezpečnosť pri práci s vláknami.
  • Preťaženie operátora +: Pre reťazce je operátor + preťažený na vykonávanie konkatenácie.
  • Dva spôsoby vytvárania:
    • Pomocou literálu reťazca: String s1 = "Hello"; - vytvorí sa v pooli reťazcov.
    • Pomocou operátora new: String s2 = new String("World"); - vytvorí sa na halde (Heap), môže byť vytvorený nový objekt aj pri existencii rovnakého literálu v poole.
  • Pool reťazcov (String Pool): Oblasť na halde, kde sa ukladajú literály reťazcov pre optimalizáciu pamäti. Pri vytváraní literálu JVM najskôr skontroluje pool. Ak taký reťazec už existuje, vráti odkaz na existujúci objekt. Ak nie, vytvorí nový a vloží ho do poolu.
  • Hlavné užitočné metódy:
    • length(): Vráti dĺžku reťazca.
    • charAt(int index): Vráti znak na danom indexe.
    • substring(int beginIndex, int endIndex): Vráti podreťazec.
    • contains(CharSequence s): Skontroluje, či reťazec obsahuje danú sekvenciu znakov.
    • indexOf(int ch) / indexOf(String str): Vráti index prvého výskytu znaku alebo podreťazca.
    • equals(Object anObject): Porovnáva obsah reťazcov. Je dôležité používať equals() na porovnanie obsahu, nie ==, ktorý porovnáva odkazy na objekty.
    • equalsIgnoreCase(String anotherString): Porovnáva reťazce bez ohľadu na veľkosť písmen.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Nahrádza znaky alebo podreťazce.
    • trim(): Odstraňuje medzery na začiatku a na konci reťazca.
    • split(String regex): Rozdeľuje reťazec na podreťazce podľa oddelovača.

Príklad vytvárania a niektorých operácií:

// Vytvorenie pomocou literálu
String str1 = "Java";

// Vytvorenie pomocou new
String str2 = new String("Java");

// Konkatenácia
String str3 = str1 + " is amazing";

// Porovnanie obsahu (používame equals, nie ==)
boolean areEqualContent = str1.equals(str2); // true

// Porovnanie odkazov (používame ==)
boolean areEqualReference = (str1 == str2); // false

// Dĺžka reťazca
int length = str3.length();

// Získanie znaku
char firstChar = str1.charAt(0); // 'J'

// Kontrola na obsah
boolean containsIs = str3.contains("is"); // true

Nemennosť String môže viesť k neefektívnosti pri viacerých modifikáciách reťazca, pretože pri každej zmene sa vytvorí nový objekt. Pre takéto scenáre je vhodnejšie použiť StringBuilder alebo StringBuffer.