String s = "Hello " + "World";
Tomáš Pitner, Radek Ošlejšek, Marek Šabo, Jakub Čecháček pitner@muni.cz
String
Neměnnou třídou v Javě je String
.
Má to řadu dobrých důvodů - tytéž jednou definované řetězce lze používat souběžně z více míst programu
Nicméně i negativní stránky - někdy větší režie spojená s nemodifikovatelností:
String s = "Hello " + "World";
Kód vytvoří 3 objekty: "Hello "
, "World"
a "Hello World"
.
Cože? To je tak neefektivní?
Pokud by vysloveně vadilo, lze místo String
použít StringBuilder
, který je modifikovatelný (mutable), viz dále
Podívejme se na rozdíl "Hello"
a new String("Hello")
.
new String("Hello")
vytvoří pokaždé nový objekt
"Hello"
funguje na principu: jestli takový objekt zatím neexistuje, tak ho vytvořím, jinak vrátím odkaz na již existující objekt (uložen v paměti String constant pool)
String s1 = "Hello";
String s2 = "Hello";
boolean bTrue = (s1 == s2); // true, identical objects
s1 = new String("Hello");
s2 = new String("Hello");
boolean bFalse = (s1 == s2); // false, different objects though with same value
String
char charAt(int index)
— vráti prvek na daném indexu
static String format(String format, Object… args)
— stejné jako printf
v C
boolean isEmpty()
— vráti true
jestli je prázdný
int length()
— velikost řetězce
matches
, split
, indexOf
, startsWith
…
Více metod najdete v dokumentaci třídy String. |
Doporučujeme javadoc prostudovat, používaním existujících metod si ušetříte spoustu práce!
V nových verzích Javy (15+) je možnost použít speciální formy řetězcových literálů:
String s = """
toto je první slovo řetězce, druhé,
druhý řádek,
třetí""";
Překladač vytvoří řetězec včetně oddělovačů řádku (dříve bylo možné pomocí znaku \n
).
Vynechá počáteční mezery (leading spaces), takže skutečně slovo "toto" bude prvními znaky řetězce s
.