1. Comparación de cadenas
Todo esto está muy bien. Pero puede ver que las cadenas s1
y s2
son en realidad las mismas, lo que significa que contienen el mismo texto. Al comparar cadenas, ¿cómo le dice al programa que no mire las direcciones de String
los objetos, sino su contenido?
Para ayudarnos con esto, String
la clase de Java tiene el equals
método. Llamarlo se ve así:
string1.equals(string2)
Este método devuelve true
si las cadenas son iguales y false
si no lo son.
Ejemplo:
Código | Nota |
---|---|
|
|
Más ejemplos:
Código | Explicación |
---|---|
|
false |
|
true |
|
true |
|
true |
2. Comparación de cadenas que no distingue entre mayúsculas y minúsculas
En el último ejemplo, viste que la comparación da como resultado . De hecho, las cuerdas no son iguales. Pero..."Hello".equals("HELLO")
false
Claramente, las cuerdas no son iguales. Dicho esto, su contenido tiene las mismas letras y solo se diferencia por el caso de las letras. ¿Hay alguna forma de compararlos y prescindir del caso de las letras? Es decir, por lo que los rendimientos ?"Hello".equals("HELLO")
true
Y la respuesta a esta pregunta es sí. En Java, el String
tipo tiene otro método especial: equalsIgnoreCase
. Llamarlo se ve así:
string1.equalsIgnoreCase(string2)
El nombre del método se traduce aproximadamente como comparar pero ignorar caso . Las letras en el nombre del método incluyen dos líneas verticales: la primera es minúscula L
y la segunda es mayúscula i
. No dejes que eso te confunda.
Ejemplo:
Código | Nota |
---|---|
|
|
3. Ejemplo de comparación de cadenas
Demos solo un ejemplo simple: supongamos que necesita ingresar dos líneas desde el teclado y determinar si son iguales. Así es como se verá el código:
Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);
4. Un interesante matiz de comparación de cadenas
Hay un matiz importante que debes tener en cuenta.
Si el compilador de Java encuentra varias cadenas idénticas en su código (específicamente en su código), creará un solo objeto para ellas para ahorrar memoria.
String text = "This is a very important message";
String message = "This is a very important message";
Y esto es lo que contendrá la memoria como resultado:
Y si comparas text == message
aquí, entonces obtienes true
. Así que no te sorprendas por eso.
Si por alguna razón realmente necesita que las referencias sean diferentes, puede escribir esto:
String text = "This is a very important message";
String message = new String ("This is a very important message");
O esto:
String text = "This is a very important message";
String message = new String (text);
En ambos casos, las variables text
y message
apuntan a diferentes objetos que contienen el mismo texto.
GO TO FULL VERSION