Comparando Strings con ==
Todos aprendimos que para comparar strings utilizamos equals, pero que sucede si ocupamos == ¿?
caso 1: los literales son iguales (quedan en el pool de strings), pero al comparar con uno creado con new String() ya no es igual a menos que se use intern:
caso 2: usando string concatenation, serán iguales si no se concatenan con variables:
caso 1: los literales son iguales (quedan en el pool de strings), pero al comparar con uno creado con new String() ya no es igual a menos que se use intern:
String d = "d";
final String dd = "d";
String ddd = new String("d");
System.out.println("1 true: " + (d == dd));
System.out.println("2 true: " + ("d" == dd));
System.out.println("3 true: " + ("""
d""" == d));
System.out.println("4 false: " + ("d" == ddd));
System.out.println("5 true: " + (d == ddd.intern()));
caso 2: usando string concatenation, serán iguales si no se concatenan con variables:
String ja = "ja";
String va = "va";
String java = "java";
String ja_va = ja + va;
System.out.println("7 true: " + (java == "java"));
System.out.println("8 true: " + ("ja" == ja));
System.out.println("9 true: " + ("va" == va));
System.out.println("10 true: " + (("ja" + "va") == java)); // se concatenan literales
System.out.println("11 false: " + (("ja" + "va") == (ja + va))); // se están concatenando 2 variables (ja + va)
System.out.println("12 false: " + (java == ja_va)); // ya se ocupó la concatenación de dos variables en ja_va
System.out.println("13 false: " + (java == ("ja" + va))); // literal con variable
en conclusión, hay que ocupar equals y no == con los strings 😉
Comentarios
Publicar un comentario