Equals, compareTo y '=='

Tengo una duda bastante común por lo que me han comentado, no termino de ver la diferencia entre esas 3 cosas...
el equals, compareTo e ==
A ver si me podías echar una mano...
(No te preocupes que el martes dejo de preguntarte jajajaja y ya te mandaré un regalito o me dirás si puedo ayudarte en algo)

1 Respuesta

Respuesta
1
Básicamente las 3 cosas que pusiste hacen lo mismo (comparar) pero se aplican para diferentes situaciones
El equals compara valores, siempre la comparación es sobre si son iguales, con valores me refiero al valor real de una clase, por ejemplo, lo usas para comparar si el contenido de una cadena es igual a otra (recuerda que String es realmente una clase no un tipo de dato primitivo como lo son int, double, float).
String a = "Hola"; String b = "ola";
if(a.equals(b))
Esta comparación te daría un false ya que el valor de las dos cadenas no es igual. Ten muy presente que este método "equals" viene desde la clase object, por lo tanto todas las clases lo tienen sin embargo solo la clase String lo implementa de una forma coherente (es decir compara el contenido de las cadenas), si lo usas para otro tipo de clases creadas por ti, se va a comportar como el == comparando referencias no valores, si quieres que compare valores tienes que sobrecargar el método en tus clases y escribir tu propia implementación.
El == como mencione anteriormente compara referencias no valores, lo puedes usar para comparar si una clase es nula o si dos clases son el mismo objeto, por ejemplo
MiClase c1, c2, c3;
c1 = new MiClase();
c2 = c1;
c3 = null;
if(c1 == c2) // esto te daria true puesto que c1 y c2 son el mismo objeto
if(c3 == null) // tambien da true puesto que c3 es nulo
El método compareTo es muy parecido al equal solo que este dice si los objetos son iguales, si uno es más grande que el otro, o si uno es más chico que el otro, aquí entra en juego una interfaz que se llama Comparable que viene implementada en todas las clases que tienen un orden natural (String, int, float), es decir que puedes darle un orden, si tu creas una clase e implementas la interfaz Comparable el compilador te va a obligar a que implementes el código para comparar debido a que el compilador no sabrá como usar los datos de tu clase en una comparación.
Gracias!
Te acabaré preguntando más cosas, que ahora ando repasando los paquetes y los ficheros jajajajaja
Un saludo! Muchísimas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas