Capítulo 002 Ejercicio 005c (Métodos de comparación) (Ejemplo 002)

/** La expresión System.out.println(n1 == n2); visualizará el resultado de la comparación
* de tipo lógico. Seguramente la salida debería ser true y después false, pues ambos
* objetos Integer son el mismo. Pero mientras que los contenidos de los objetos son los mismos,
* las referencias no son las mismas, y los operadores == y != comparan referencias a
* objetos. Por ello, la salida es, de hecho, false y después true. Naturalmente esto
* sorprende a la gente al principio.
*
* ¿Qué ocurre si se desea comparar los contenidos de dos objetos? Es necesario utilizar el método
* especial equals()/b> que existe para todos los objetos (no primitivos, que funcionan perfectamente
* con == y !=.
*
* El resultado es true tal y como se espera.
*
* Ah, pero no es así de simple. Si uno crea su propia clase, como ésta:
*/

class Valor {
int i;
}

/** Se obtiene como resultado false. Esto se debe a que el comportamiento por defecto de equals()
* es comparar referencias. Por tanto, a menos que se invalide equals en la nueva clase no se obtendrá
* el comportamiento deseado. Desgraciadamente no se mostrarán las invalidaciones hasta más adelante, pero
* debemos ser conscientes mientras tanto de la forma en que se comporta equals() podría ahorrar algunos
* problemas.
*
* La mayoría de las clases de la biblioteca Java implementan equals(), de forma que compara los
* contenidos de los objetos en vez de sus referencias.
*/
public class MetodoComparacion2{
public static void main (String args[]){
Valor v1 = new Valor();
Valor v2 = new Valor();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
}