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:

        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

Entradas más populares de este blog

Spring Boot + Spring Security + React + Keycloak

Servicios: Invertir las dependencias utilizando el sistema de módulos

MicroProfile y JWT