Sobes.tech
Junior

Ispričaj mi o klasi String u programskom jeziku Java.

sobes.tech АИ

Одговор од АИ

Klasa String u Javi predstavlja nemodifikacionu sekvencu znakova.

Glavne karakteristike i osobine:

  • Nemodifikacionost (Immutability): Nakon kreiranja objekta String, njegov sadržaj ne može biti izmenjen. Svaka operacija koja deluje kao modifikacija niza (npr. konkatenacija) zapravo kreira novi objekat String. To povećava sigurnost i sigurnost u višedretvenom okruženju.
  • Preopterećenje operatora +: Za nizove, operator + je preopterećen za izvršavanje konkatenacije.
  • Dva načina kreiranja:
    • Pomoću literala niza: String s1 = "Hello"; - kreira se u pool-u nizova.
    • Korišćenjem operatora new: String s2 = new String("World"); - kreira se na hrpi (Heap), može biti kreiran novi objekat čak i ako postoji isti literal u pool-u.
  • Pool nizova (String Pool): Oblast na hrpi gde se čuvaju literali nizova radi optimizacije memorije. Pri kreiranju literala JVM prvo proverava pool. Ako takav niz već postoji, vraća referencu na postojeći objekat. Ako ne, kreira novi i smešta ga u pool.
  • Glavne korisne metode:
    • length(): Vraća dužinu niza.
    • charAt(int index): Vraća karakter na datom indeksu.
    • substring(int beginIndex, int endIndex): Vraća podniz.
    • contains(CharSequence s): Proverava da li niz sadrži datu sekvencu znakova.
    • indexOf(int ch) / indexOf(String str): Vraća indeks prvog pojavljivanja znaka ili podniza.
    • equals(Object anObject): Upoređuje sadržaj nizova. Važno je koristiti equals() za poređenje sadržaja, a ne ==, koji poredi reference na objekte.
    • equalsIgnoreCase(String anotherString): Upoređuje nizove bez obzira na velika i mala slova.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Zamenjuje znakove ili podnizove.
    • trim(): Uklanja razmake na početku i kraju niza.
    • split(String regex): Razdvaja niz na podnizove prema datom separatoru.

Primer kreiranja i nekih operacija:

// Kreiranje pomoću literala
String str1 = "Java";

// Kreiranje pomoću new
String str2 = new String("Java");

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

// Poređenje sadržaja (koristimo equals, a ne ==)
boolean areEqualContent = str1.equals(str2); // true

// Poređenje referenci (koristimo ==)
boolean areEqualReference = (str1 == str2); // false

// Dužina niza
int length = str3.length();

// Dobijanje karaktera
char firstChar = str1.charAt(0); // 'J'

// Provera sadržaja
boolean containsIs = str3.contains("is"); // true

Nemodifikacionost String može dovesti do neefikasnosti pri višestrukim modifikacijama niza, jer se za svaku promenu kreira novi objekat. Za takve scenarije je preporučljivo koristiti StringBuilder ili StringBuffer.