Comparación de cadenas en Java

  1. Comparación de cadenas en Java con el método compareTo()
  2. El método del operador de igualdad ==
  3. El método equals()
  4. El método equals() Sensibilidad a las mayúsculas y minúsculas
  5. El método contentEquals()

Casi todos los desarrolladores de Java necesitarán en algún momento comparar dos cadenas para completar la lógica de una aplicación. Una variable string es una colección de caracteres. Para entender las operaciones de comparación que son posibles con una cadena, primero necesitamos entender las propiedades de una cadena.

  1. Las cadenas son inmutables. Esto significa que no pueden crecer y que cualquier cambio en una cadena lleva a la formación de una nueva cadena. Esto se debe a que están respaldadas internamente por char-arrays que son inmutables.
  2. Cada vez que decimos que se crea una cadena, se crean dos objetos situados en diferentes áreas de memoria. Uno se crea en la zona del heap, mientras que el segundo se crea en el pool de constantes String. La referencia a la cadena apunta a la máquina hacia el objeto del área del montón.

Por ejemplo,

String mystring = "World"

En este caso, mystring apunta al área de heap donde se almacena la cadena World.

A continuación se presentan los cuatro métodos utilizados para comparar cadenas en java y se explican en detalle en este artículo:

  1. El método compareTo().
  2. El operador de igualdad ==.
  3. El método equals().
  4. El método contentEquals().

Comparación de cadenas en Java con el método compareTo()

Compara dos cadenas lexicográficamente. Funciona asignando primero a cada carácter de la cadena un valor Unicode y luego comparando las cadenas. Este proceso devuelve el resultado como cero, un número positivo o un número negativo.

  1. El resultado es cero cuando las dos cadenas comparadas son iguales lexicográficamente.
  2. El resultado es positivo si la primera cadena es mayor que la segunda.
  3. El resultado es negativo cuando la segunda cadena es mayor que la primera.

Hay dos formas de utilizar el método compareTo().

Comparar dos cadenas literales

Comparemos la cadena1 y la cadena2. El resultado que obtenemos al comparar estas dos cadenas es de tipo int. Ejemplo:

public class CompareToCode {
    public static void main(String args[]) {
        String string1 = "now";
        String string2 = "now";
        int result = string1.compareTo(string2);
        System.out.println(result);
   }
}

Resultado:

0

Comparación de una cadena y un objeto

El método compareTo() también permite comparar objetos no referenciados con una cadena. Ejemplo:

public class CompareTo {
    public static void main(String args[]) {
        String string1 = "now";
        int result = string1.compareTo("now");
        System.out.println(result);
    }
}

Producción:

0

compareTo() Sensibilidad a las mayúsculas y minúsculas

El método compareTo() distingue entre mayúsculas y minúsculas. Esto significa que aunque dos cadenas sean iguales, las mostrará como diferentes si no son uniformes. Ejemplo:

public class CompareTo {
    public static void main(String args[]) {
        String string1= "hello";
        String string2 ="HELLO";
        int result= string1.compareTo(string2);
        System.out.println(result);
   }
}

Producción:

-32

El mundo hello y HELLO se manejan de forma diferente a la anterior, y por lo tanto obtenemos un resultado de -32.

Sin embargo, otro método de esta clase de cadenas ignora la sensibilidad a las mayúsculas y minúsculas - compareToIgnoreCase(). Ejemplo:

public class CompareToIgnoreCase {
    public static void main(String args[]) {
        String string1= "hello";
        String string2 ="HELLO";
        int result= string1.compareToIgnoreCase(string2);
        System.out.println(result);
   }
}

Resultado:

0

El método del operador de igualdad ==

Es un método de comparación de cadenas de java que compara si dos objetos están en la misma ubicación de memoria. Ejemplo:

public class EqualityOperator {
    public static void main(String args[]) {
        String oneS = new String("Wow");
        String twoS = new String("Wow");
        System.out.println(oneS == twoS);
    }
}

Producción:

false

El operador == compara los objetos unoS y dosS para comprobar si son iguales. Ambas cadenas, oneS y twoS son referencias diferentes y por tanto devuelven false. oneS y twoS son dos objetos diferentes. Sin embargo, ambos tienen el mismo valor en ellos.

El método equals()

Este es un método utilizado para comparar dos cadenas en java basado en su valor. El resultado de este método es verdadero o falso. Si las cadenas que se comparan no son iguales por el valor, entonces el método devuelve false. Si las cadenas que se comparan son iguales, el método devuelve true. Por ejemplo,

public class Equals {
    public static void main(String args[]) {
        String oneS = new String("Wow");
        String twoS = new String("Wow");
        System.out.println(oneS.equals(twoS));
    }
}

Producción:

true

El método equals() Sensibilidad a las mayúsculas y minúsculas

El método equals() es sensible a las mayúsculas y minúsculas y, por lo tanto, considera que las mismas palabras con mayúsculas son diferentes. Por ejemplo:

public class Equals {
    public static void main(String args[]) {
        String oneS = new String("Wow");
        String twoS = new String("WOW");
        System.out.println(oneS.equals(twoS));
    }
}

Producción:

false

En el caso anterior, wow comparado con WOW usando el método equals() devuelve false.

Sin embargo, si quiere utilizar el método equals() y no considerar la sensibilidad a las mayúsculas y minúsculas, utilice el método equalsToIgnoreCase(). Para el ejemplo anterior, equalsIgnoreCase() devolvería true.

public class EqualsIgnorecase {
    public static void main(String args[]) {
        String oneS = new String("Wow");
        String twoS = new String("WOW");
        System.out.println(oneS.equalsIgnoreCase(twoS));
    }
}

Producción:

true

El método contentEquals()

Este es también un método java de comparación de cadenas que compara un buffer de cadenas y una cadena y devuelve false o true. Si la cadena coincide con el buffer de cadena con el que se está comparando, el método devuelve true. Si la cadena no coincide con el buffer de cadena con el que se está comparando, el método devuelve false.

Ejemplo:

public class ContentEquals {
    public static void main(String args[]) {
        String firstS = new String("Here we are");
        StringBuffer secondS = new StringBuffer("Here we are");
        System.out.println(firstS.contentEquals(secondS));
    }
}

Producción:

true