Java define el
operador de igualdad sobre todo tipo de datos
a == b
Tipos
primitivos
devuelve TRUE si los valores de a y b son idénticos.
OJO: La igualdad está muy bien definida para enteros, booleanos y
caracteres; pero deja que desear en el caso de valores reales. Comparar dos
reales es chequear que son idénticos hasta el último decimal, lo que puede dar
resultados extraños si hay errores de
redondeo. En el caso de números reales es mejor escribir código del tipo
Math.abs(a -b) <
ERROR
donde ERROR especifica la
precisión de la comparación.
Objetos,
incluidos arrays
devuelve TRUE si se refieren al
mismo objeto.
Si interesa
comparar el contenido de los objetos, conviene recurrir a un método específico
que, por convenio, se suele denominar “equals”.
En el siguiente
ejemplo, dos cartas se consideran "equals" si son del mismo palo y
del mismo valor.
class Palo |
public enum Palo { Bastos, Copas, Espadas, Oros } |
class
Carta |
public
class Carta { private Palo palo; private int valor; public Carta(Palo palo, int valor) { this.palo = palo; this.valor = valor; } @Override public boolean equals(Object x) { if (x == this) return true; if (x == null) return true; if (x.getClass() != this.getClass())
return false; Carta carta= (Carta)x; return this.palo == carta.palo &&
this.valor == carta.valor; } @Override public int hashCode() { return palo.ordinal() ^ valor; } } |
class
TestCarta |
public
class TestCarta { public static void main(String[] args) { Carta c1 = new Carta(Palo.Copas, 1); Carta c2 = new Carta(Palo.Copas, 1); Carta c3 = new Carta(Palo.Copas, 2); System.out.println("c1 == c1 -> " + (c1 == c1)); System.out.println("c1 == c2 -> " + (c1 == c2)); System.out.println("c1.equals(c2)
-> " + c1.equals(c2)); System.out.println("c1 == c3
-> " + (c1 == c3));
System.out.println("c1.equals(c3) -> " + c1.equals(c3)); } } |
ejecución de las pruebas |
c1 == c1 -> true c1 == c2 -> false c1.equals(c2) -> true c1 == c3 -> false c1.equals(c3) -> false |
Ver “equals()”.
Temas relacionados