Diferencias del Metodo equals() y ==

johano
29 de Marzo del 2005
Saludos a todos
Porq es q el siguiente codigo me da resultados diferentes? Lo que realmente no entiendo es porq en mi constructor recibo un numero entero, que es igual al constructor de la clase Integer, por lo tanto creia que me deberia desplegar el mismo resultado y no es asi. Comparando los objetos Int1 y Int2 despliega como resultado "true" y "false", pero con los objetos CV1 y CV2 despliega "false" y "false". Si alguien me pudiera aclarar esto debido a que mi clase "CompararVar" y la clase "Integer" tienen el mismo constructor.

public class CompararVar{
public CompararVar(int i){
System.out.println("Variable I del Objeto CompararVar " + i);
}
public static void main(String [] args){
Integer int1 = new Integer(13);
Integer int2 = new Integer(13);
System.out.println(int1.equals(int2));
System.out.println(int1 == int2);

CompararVar CV1 = new CompararVar(15);
CompararVar CV2 = new CompararVar(15);
System.out.println(CV1.equals(CV2));
System.out.println(CV1 == CV2);
}
}

Salida del programa:
true
false
Variable I del Objeto CompararVar 15
Variable I del Objeto CompararVar 15
false
false


/// Gracias anticipadas

Isma
29 de Marzo del 2005
A ver por dónde empiezo. Por ejemplo, el tipo de datos int, en Java, es un tipo de dato de los llamados primitivos (más o menos como c++), con lo cuál puedes utilizar los operadores lógicos y aritméticos de la forma habitual. En tu caso puedes utilizar el operador == de la manera normal.
Sin embargo, Integer, no es un tipo de dato primitivo. Es una clase!!. Entoces cuando tú tienes un objeto del tipo Integer NO estás manejando su valor, sino un puntero a tu objeto Integer. Porque en Java todo son punteros (menos los tipos de datos primitivos). Así que cuando utilizas el operador == no estás comparando el valor de los integer, sino los punteros (las direcciones que apuntan al objeto). De modo que para objetos estás obligado a utilizar el método equals().

Espero que te sea de ayuda. Un salduo