jueves, 11 de abril de 2013

Diferencia entre comparar con == y con equals() en Java













 Alguien podría preguntarse que cual es la diferencia entre comparar objetos String utilizando el operador igual ( == ) y utilizando el método equals(). La respuesta es sencilla, pero hay que tener claros los conceptos:

  • El operador == realiza la comparación a nivel de objeto. Es decir, determina si ambos objetos son iguales.
  • El método equals() compara los caracteres dentro del objeto String. 

 Veamos un ejemplo:

public static void main(String[] args) {

        String c1 = "Hola";

        String c2 = new String(c1);

        System.out.println(c1 + " == " + c2 + " -> " + (c1 == c2));

        System.out.println(c1 + " equals " + c2 + " -> " + c1.equals(c2));

    }


Si lo ejecutamos veremos que:


  • c1 == c2 devuelve false (ambos objetos no son iguales).
  • c1.equals(c2) devuelve true (sus caracteres son iguales: “Hola”).


Ahora vamos a instanciar un nuevo objeto apartir de c1 (exactamente como hemos hecho con c2). El nuevo objeto lo vamos a comparar con c2:



String c3 = c1;

System.out.println(c1 + " == " + c3 + " -> " + (c1 == c3)); 


Osea, hemos comparado dos objetos iguales y lo que devuelve sería ésto:
    • c1 == c3 devuelve true.


    Espero que haya quedado claro. Como siempre, para cualquier duda podéis utilizar los comentarios.



    Fuente:

    http://www.java-samples.com/showtutorial.php?tutorialid=221




    8 Comentarios:

    Anónimo dijo...

    Claro, muchas gracias.

    Felipe Martínez D. dijo...

    Gracias a tí por comentar. Saludos.

    Anónimo dijo...

    muy buen aporte
    Gracias

    Felipe Martínez D. dijo...

    De nada. Un saludo.

    Unknown dijo...

    GRacias, me ayudo mucho.

    Felipe Martínez D. dijo...

    Gracias a tí por comentar. Un saludo.

    Unknown dijo...

    en el ultimo ejemplo creo que sería: System.out.println(c2 + " == " + c3 + " -> " + (c2 == c3));

    Felipe Martínez D. dijo...

    Hola.

    El código que tu indicas es exactamente igual que el que yo he puesto en el último ejemplo. ¿Que diferencia hay?.

    Saludos.

    Publicar un comentario

    Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

    TOPO