Porovnávání řetězců v Jave
Mnoho nováčku, kteří přejdou na jazyk Java, má trochu problém pochopit význam operátoru porovnání
==. Drobné zmatení je způsobeno faktem, že v Jave existují objekty a primitivní
datové typy. Význam == je jiný pro primitivní datové typy, kdy se porovnává jejich hodnota a jiný
jiný pro objekty kdy se porovnávají jejich odkazy nikoliv hodnota! Objekty většinou poskytují metodu
equals, která slouží k porovnání s jiným objektem. Zvažte následující příkládky, pro
primitivní datové typy a objekty.
int foo = 1;
int hoo = 1;
System.out.println(foo == hoo); //true - rovnoInteger foo = new Integer(1);
Integer hoo = new Integer(1);
System.out.println(foo == hoo);
//false - nerovné (porovnáváme dva různé objekty)
System.out.println(foo.equals(hoo));
//true - rovno(porovnáváme hodnoty)Datový typ String je zvláštním případem, kdy výše uvedené řádky tak docela neplatí.
String foo = "nazdarbazar";
String hoo = "nazdarbazar";
System.out.println(foo == hoo);//true!
System.out.println(hoo == ("nazdar"+"bazar"));//true!Pokud jste překvapeni a nechcete se pouštět do čtení Java Language Specifiacation, kde je to pěkně vysvětleno v
3.10.5 String Literals,
pak mohu doporučit článek (Not So) Stupid Questions:String Equality, kde
je tato problematika velice pěkně vysvětlena.
Související články
Související epizody CZ Podcastu
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi a Filemon o novinkách v Javě 6 a webových frameworcích.
- #1 · Vývojová prostředí v Javě
První díl CZ Podcastu se věnuje vývojovým prostředím pro Javu.