Java - Comparación de objetos

   
Vista:

Comparación de objetos

Publicado por Andrew (9 intervenciones) el 26/10/2013 21:21:48
Buenas, a ver si sé explicarme.
Lo que yo quiero saber es si dos objetos pueden ser comparados con un simple "==" sin que dé prblemas. Pongo un ejemplo para ilustrarlo:

-Imaginemos que tenemos dos vectores, o listas. En el ejemplo usaré ArrayLits para darle algo más de generalidad, y porque son los que suelo utilizar yo.

ArrayList A1;
ArrayList A2;

Durante el programa, los inicializo, y los lleno de objetos. De forma dinámica, los objetos van entrando y saliendo de estas listas durante el programa.
Llegado un punto, quiero comproba si cierto objeto de A1, en la posición "a", es el mismo que uno de A2, en la posición "b". ¿Se puede hacer una comparación directa? Del tipo:

1
2
3
4
5
6
7
8
9
if (A1.get(a) == A2.get(b)) {
  Cosas();
}
/* para los que no estén familiarizados con ArrayList,
  si fuera un Array normal sería lo mismo que decir:
  if (A1[a] == A2[b]) {
    Cosas();
  } 
*/

¿O es mejor utilizar alguna otra función para compararlos?

-En la misma línea, si uno de los objetos en cuestión quiere saber si él mismo es cierto objeto de la lista, ¿se puede hacer esta comparación?:

if (this == A1.get(a)){
Cosas();
}

-Por último. El método get() de los ArrayList me devuelve un Object, independientemente de lo que esté dentro (ya que en un ArrayList puedes meter cualquier tipo de objetos, e incluso tipos básicos, mezclados). ¿Cómo puedo comprobar si esos dos objetos (los resultanes de A1.get(a) y A2.get(b)) son del mismo tipo? Quiero decir, yo creo varias clases, y tengo una que es Tipo1 y otra que es Tipo2. Meto varios objetos de ambas en los Arrays, y luego quiero comprobar si dos objetos concretos son ambos de Tipo1 o de Tipo2, o son distintos. Bueno, ya sé que con algún parámetro que se exista en las clases puedo hacerlo de forma indirecta, pero quería saber si existía una función específica que te diga si dos objetos son del mismo tipo (instancias de la misma clase, vaya).

Espero no haberme complicado mucho, y que se me entienda. Volveré a explicarlo si hace falta a quien me lo pregunte amablemente.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Comparación de objetos

Publicado por Vicente (56 intervenciones) el 26/10/2013 21:41:15
Las comparaciones de datos primitivos se hacen con (==) las de objetos con el metodo equals:
objeto1.equals(objeto2)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparación de objetos

Publicado por Andrew (9 intervenciones) el 26/10/2013 22:00:00
Es verdad, que bobo soy, si el equals() lo utilizo con los String...
Muchas gracias.

En todo caso, ¿qué ocurre si comparo con "=="? ¿Da error, estoy comparando en realidad otra cosa, o es simplemente una buena costumbre no hacerlo?

¿Y como se comparan los tipos de objetos, como digo en mi 3ª duda?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparación de objetos

Publicado por Vicente (56 intervenciones) el 26/10/2013 22:30:30
Comparando con "==" sólo comparas referencias de objetos, es decir, los espacios de memoria que se le destinan al crearlos. En los String es posible que te devuelva true en algunos casos la comparación con "==", pero es erroneo ese dato. Si lo intentas con objetos de clases creadas por ti el programita debería darte error en esa línea.

Te recomiendo siempre reescribir tus propios métodos, es decir, supongo que el método toString() que hereda de Object lo habrás usado muchas veces, pues el método equals es igual a ese, hazte tus propios métodos y así los trabajas como quieres tú.

Para tu última duda, la de los tipos de objeto usa esto: objeto.getClass()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparación de objetos

Publicado por Andrew (9 intervenciones) el 27/10/2013 12:46:43
¡Muchas gracias!
Con esto ya lo he solucionado todo, y he despejado mis dudas.
Hasta otra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar