Comparación de Cadenas en Java
Desliza para mostrar el menú
La comparación es donde Java comienza a comportarse de manera un poco más "de bajo nivel" de lo esperado. Parece obvio que las cadenas podrían compararse de la misma manera que los números — usando ==. Después de todo, si dos cadenas parecen idénticas, ¿por qué no serían iguales?
El problema con ==
Si usas == con literales de cadena, al principio parece funcionar bien:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "Latte"; System.out.println(order1 == order2); } }
Ambas variables apuntan al mismo objeto en el string pool interno de Java; cuando aparece el mismo literal nuevamente, Java reutiliza el existente. Por eso, == devuelve true.
Pero ahora cambiemos ligeramente cómo se crean las cadenas:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1 == order2); } }
Usar new String() le indica a Java que cree un objeto completamente separado cada vez, incluso si el contenido es idéntico. Como == compara direcciones de memoria, no el texto, devuelve false.
La regla clave: == no analiza el texto dentro de la cadena, sino que verifica si ambas variables apuntan al mismo objeto exacto en memoria.
equals() — Comparar el contenido real
Si necesitas comparar el texto real dentro de dos cadenas, utiliza .equals(). Ignora completamente la memoria y se enfoca solo en los caracteres:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = new String("Latte"); String order2 = new String("Latte"); System.out.println(order1.equals(order2)); } }
Aunque order1 y order2 son objetos separados en memoria, .equals() compara su contenido y devuelve true.
Sensibilidad a mayúsculas y minúsculas con equals()
Java distingue entre mayúsculas y minúsculas, por lo que incluso una sola letra con diferente capitalización hace que las cadenas no sean iguales:
Main.java
1234567891011package com.example; public class Main { public static void main(String[] args) { String order1 = "Latte"; String order2 = "latte"; System.out.println(order1.equals(order2)); } }
"Latte" y "latte" se tratan como cadenas diferentes, por lo que el resultado es false.
equalsIgnoreCase() — Comparación sin importar mayúsculas o minúsculas
Para comparar cadenas ignorando las diferencias entre mayúsculas y minúsculas, utiliza .equalsIgnoreCase():
Main.java
12345678910package com.example; public class Main { public static void main(String[] args) { String order = "Latte"; System.out.println(order.equalsIgnoreCase("LATTE")); } }
.equalsIgnoreCase() considera "Latte" y "LATTE" como idénticos y devuelve true.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla