Comparar Cadenas

En java la comparación de cadenas se hacen exclusivamente con el método equals("cadena") o equalsIgnoreCase("cadena"), no se pueden comparar dos cadenas usando el operador ==, ya que éste operador se usa para comparar datos de tipo primitivo en Java y no para objetos, además de que el operador == compara referencias y no valores.

 

aquí tenemos un ejemplo

 

int x=10;

if(x==10){ //Esta instrucción siempre dará true

}

 

String cad1="perro";
String cad2="perro";
if(cad1==cad2){ //Esta instrucción siempre dará false

}  

 

Pero ¿Porqué pasa esto?

 

Bueno en Java el operador == indica que sea igual la referencia de un objeto, es decir, que los dos objetos estén tomando el valor desde la misma posición de memoria, cuando un valor no toma los mismo datos de la misma posición de memoria para Java ya son valores diferentes.

 

Para comenzar con el ejemplo para comparar cadenas crearé una clase llamada ComparacionCadenas con su método main().

 

Primeramente declararé tres variables de tipo String.

 

String cad1="perro";
String cad2="perro";

String cad3="gato";

 

if(cad1.equals(cad2))
    System.out.println(cad1+" y "+cad2+" son iguales");
 else
    System.out.println(cad1+" y "+cad2+" son diferentes");

 

En esta condición estamos comparando dos objetos de tipo String cad1 y cad2, ambos contien la palabra "perro", el cual el método equals(Object) viene retornando un tipo booleano, en nuestro ejemplo anterior siempre será verdadero.

 

if(cad1.equals(cad3))
    System.out.println(cad1+" y "+cad3+" son iguales");
else
    System.out.println(cad1+" y "+cad3+" son diferentes");


En este segundo ejemplo la condición siempre será false ya que comparamos las palabras "perro" con "gato.

 

if(cad1.equals("Perro"))
    System.out.println(cad1+" y "+"Perro"+" son iguales");
else
    System.out.println(cad1+" y "+"Perro"+" son diferentes");

 

En este tercer ejemplo la condición siempre será false ya que comparamos las palabras "perro" con "Perro", el cual la segunda palabra contiene una letra mayúscula y hace diferente la palabra, para este caso podemos usar el método equalsIgnoreCase(String).

 

if(cad3.equalsIgnoreCase("GaTo"))
    System.out.println(cad3+" y "+"GaTo"+" son iguales");
 else
    System.out.println(cad3+" y "+"GaTo"+" son diferentes");

 

En este cuarto ejemplo la condición siempre será verdadera ya que comparamos las palabras "gato" con "GaTo" pero ignoramos las letras que están en mayúscula y las trata como si fueran minúsculas.

 

Código completo utlizado

package pqtOtros;

public class CompararCadenas {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String cad1="perro";
        String cad2="perro";
        String cad3="gato";

        if(cad1.equals(cad2))
            System.out.println(cad1+" y "+cad2+" son iguales");
        else
            System.out.println(cad1+" y "+cad2+" son diferentes");
        
        if(cad1.equals(cad3))
            System.out.println(cad1+" y "+cad3+" son iguales");
        else
            System.out.println(cad1+" y "+cad3+" son diferentes");
        
        if(cad1.equals("Perro"))
            System.out.println(cad1+" y "+"Perro"+" son iguales");
        else
            System.out.println(cad1+" y "+"Perro"+" son diferentes");
        
        if(cad3.equalsIgnoreCase("GaTo"))
            System.out.println(cad3+" y "+"GaTo"+" son iguales");
        else
            System.out.println(cad3+" y "+"GaTo"+" son diferentes");
    }

}