Sobes.tech
Junior

Papaskinkite apie String klasę Java programavimo kalboje.

sobes.tech AI

Atsakymas iš AI

„String“ klasė Java kalboje reprezentuoja nekintamą simbolių seką.

Pagrindinės savybės ir ypatybės:

  • Nekintamumas (Immutability): Po to, kai sukuriamas String objektas, jo turinys negali būti pakeistas. Bet kokia operacija, kuri atrodo kaip modifikacija (pavyzdžiui, sujungimas), iš tikrųjų sukuria naują String objektą. Tai didina saugumą ir saugumą keliuose siūluose.
  • Operatoriaus + perkrovimas: Eilutėms operatorius + yra perkrautas sujungimui.
  • Dvi kūrimo būdai:
    • Naudojant eilutės literalius: String s1 = "Hello"; – sukuriama eilutės baseine.
    • Naudojant new operatorių: String s2 = new String("World"); – sukuriama heap'e, gali būti sukurtas naujas objektas net jei toks pats literalas jau yra baseine.
  • Eilutės baseinas (String Pool): Heap'o dalis, kurioje saugomos literalių eilutės, siekiant optimizuoti atmintį. Sukūrus eilutę, JVM pirmiausia patikrina baseiną. Jei tokia eilutė jau egzistuoja, grąžina nuorodą į esamą objektą. Jei ne, sukuria naują ir įdeda į baseiną.
  • Pagrindiniai naudingi metodai:
    • length(): Grąžina eilutės ilgį.
    • charAt(int index): Grąžina simbolį nurodytu indeksu.
    • substring(int beginIndex, int endIndex): Grąžina dalį eilutės.
    • contains(CharSequence s): Patikrina, ar eilutė turi nurodytą simbolių seką.
    • indexOf(int ch) / indexOf(String str): Grąžina pirmojo pasikartojimo indeksą.
    • equals(Object anObject): Lygina turinį. Svarbu naudoti equals() turinio palyginimui, o ne ==, kuris lygina nuorodas.
    • equalsIgnoreCase(String anotherString): Lygina be didžiųjų ir mažųjų raidžių.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Pakeičia simbolius ar dalis.
    • trim(): Pašalina tarpus pradžioje ir pabaigoje.
    • split(String regex): Suskaido eilutę į dalis pagal skiriamąjį ženklą.

Pavyzdžiai sukūrimo ir kai kurių operacijų:

// Naudojant literalius
String str1 = "Java";

// Naudojant `new`
String str2 = new String("Java");

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

// Turinys lyginimas (naudojame `equals`, o ne `==`)
boolean areEqualContent = str1.equals(str2); // true

// Nuorodų lyginimas (naudojame `==`)
boolean areEqualReference = (str1 == str2); // false

// Eilutės ilgis
int length = str3.length();

// Simbolio gavimas
char firstChar = str1.charAt(0); // 'J'

// Turinys patikrinimas
boolean containsIs = str3.contains("is"); // true

Nekintamumas String gali sukelti efektyvumo problemų, jei dažnai keičiamas eilutės turinys, nes kiekvieną kartą sukuriamas naujas objektas. Tokiu atveju geriau naudoti StringBuilder arba StringBuffer.