dagblog.
← Archiv

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 - rovno
Integer 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.

Verze na Medium

Související články

Související epizody CZ Podcastu