Sobes.tech
Junior

Mesélj a Java programozási nyelv String osztályáról.

sobes.tech MI

Válasz az MI-től

A String osztály Java-ban egy változatlan karakterlánc-sorozatot képvisel.

Fő jellemzők és sajátosságok:

  • Változatlanság (Immutability): Miután létrehoztunk egy String objektumot, annak tartalma nem módosítható. Bármilyen művelet, amely úgy tűnik, mintha módosítaná a szöveget (például összefűzés), valójában egy új String objektumot hoz létre. Ez növeli a biztonságot és a szálbiztonságot.
  • Az + operátor túlterhelése: Sztringek esetén az + operátor túlterhelt az összefűzés végrehajtására.
  • Két létrehozási mód:
    • Szöveg literál segítségével: String s1 = "Hello"; - ez a sztring a String Pool-ban jön létre.
    • Az new operátor használatával: String s2 = new String("World"); - ez a heap-en jön létre, és akár ugyanaz a literál is lehet, de külön objektum lesz.
  • String Pool: A heap egy része, ahol a szöveg literálokat tárolják a memóriahatékonyság érdekében. Szöveg literál létrehozásakor a JVM először ellenőrzi a pool-t. Ha a szöveg már létezik, akkor a meglévő objektumra mutató hivatkozást ad vissza. Ha nem, akkor létrehoz egy újat és hozzáadja a pool-hoz.
  • Fő hasznos metódusok:
    • length(): A szöveg hosszát adja vissza.
    • charAt(int index): A megadott indexű karaktert adja vissza.
    • substring(int beginIndex, int endIndex): Részsztringet ad vissza.
    • contains(CharSequence s): Ellenőrzi, hogy tartalmazza-e a szöveg a megadott karakterláncot.
    • indexOf(int ch) / indexOf(String str): Az első előfordulás indexét adja vissza.
    • equals(Object anObject): A tartalmat hasonlítja össze. Fontos, hogy equals()-t használjunk a tartalom összehasonlítására, nem pedig ==-t, ami az objektumokra mutató hivatkozásokat hasonlítja.
    • equalsIgnoreCase(String anotherString): Különböző kis- és nagybetűk esetén is egyezést vizsgál.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Karaktereket vagy szövegrészeket cserél.
    • trim(): A szöveg elején és végén lévő szóközöket távolítja el.
    • split(String regex): Szöveget feloszt a megadott elválasztó szerint.

Példák létrehozásra és néhány műveletre:

// Literál segítségével
String str1 = "Java";

// `new` használatával
String str2 = new String("Java");

// Összefűzés
String str3 = str1 + " is amazing";

// Tartalom összehasonlítása (az `equals`-t használjuk, nem a `==`)
boolean areEqualContent = str1.equals(str2); // true

// Hivatkozások összehasonlítása (az `==`-t használjuk)
boolean areEqualReference = (str1 == str2); // false

// Szöveg hossza
int length = str3.length();

// Karakter lekérése
char firstChar = str1.charAt(0); // 'J'

// Tartalmaz-e
boolean containsIs = str3.contains("is"); // true

A String változatlansága hatékonysági problémákat okozhat, ha sokszor módosítjuk a szöveget, mivel minden alkalommal új objektum jön létre. Ilyen esetekben célszerűbb a StringBuilder vagy a StringBuffer használata.