Sobes.tech
Junior

Pověz mi o třídě String v jazyce Java.

sobes.tech AI

Odpověď od AI

Třída String v jazyce Java představuje neměnnou posloupnost znaků.

Hlavní vlastnosti a charakteristiky:

  • Neměnnost (Immutability): Po vytvoření objektu String jeho obsah nelze změnit. Jakákoli operace, která vypadá, že mění řetězec (například spojování), ve skutečnosti vytvoří nový objekt String. To zvyšuje bezpečnost a vlákna bezpečnost.
  • Přetížení operátoru +: U řetězců je operátor + přetížen pro spojování.
  • Dva způsoby tvorby:
    • Pomocí literálu řetězce: String s1 = "Hello"; - je vytvořen v poolu řetězců.
    • Pomocí operátoru new: String s2 = new String("World"); - je vytvořen na haldě, může být vytvořen nový objekt i při existenci stejného literálu v poolu.
  • Pool řetězců (String Pool): Oblast na haldě, kde jsou uloženy literály řetězců pro optimalizaci paměti. Při vytváření literálu JVM nejprve zkontroluje pool. Pokud takový řetězec již existuje, vrátí odkaz na existující objekt. Pokud ne, vytvoří nový a vloží ho do poolu.
  • Hlavní užitečné metody:
    • length(): Vrací délku řetězce.
    • charAt(int index): Vrací znak na daném indexu.
    • substring(int beginIndex, int endIndex): Vrací podřetězec.
    • contains(CharSequence s): Kontroluje, zda řetězec obsahuje danou posloupnost znaků.
    • indexOf(int ch) / indexOf(String str): Vrací index prvního výskytu znaku nebo podřetězce.
    • equals(Object anObject): Porovnává obsah řetězce. Je důležité používat equals() pro porovnání obsahu, nikoli ==, který porovnává odkazy na objekty.
    • equalsIgnoreCase(String anotherString): Porovnává řetězce bez ohledu na velikost písmen.
    • replace(char oldChar, char newChar) / replace(CharSequence target, CharSequence replacement): Nahrazuje znaky nebo podřetězce.
    • trim(): Odstraňuje mezery na začátku a na konci řetězce.
    • split(String regex): Rozděluje řetězec na podřetězce podle oddělovače.

Příklad tvorby a některých operací:

// Tvorba pomocí literálu
String str1 = "Java";

// Tvorba pomocí new
String str2 = new String("Java");

// Spojení
String str3 = str1 + " is amazing";

// Porovnání obsahu (používáme equals, nikoli ==)
boolean areEqualContent = str1.equals(str2); // true

// Porovnání odkazů (používáme ==)
boolean areEqualReference = (str1 == str2); // false

// Délka řetězce
int length = str3.length();

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

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

Neměnnost String může vést k neefektivitě při vícenásobných úpravách řetězce, protože pokaždé se vytvoří nový objekt. Pro takové scénáře je vhodnější použít StringBuilder nebo StringBuffer.