que obtener objetos listas ejemplo datos comparar botones java object comparison object-comparison

objetos - obtener datos de un jlist java



¿El método igual funciona con objetos? ¿Si es así, cómo? (3)

Tengo un programa que es zoológico y en el zoológico hay subgrupos ramificados de animales que son reptiles. Cuando hago un método igual, el programa principal se compila y se ejecuta. Estoy confundido, ¿cómo sabe Java utilizar el método equals si estoy comparando objetos y no específicamente int o String?

public class Zoo { public static void main(String[]args) { Animal a=new Animal("Bob"); Reptile komodo= new Reptile("Snakey"); komodo.bask(); a.size=3; komodo.size=5; System.out.println(a); System.out.println(komodo); Turtle t= new Turtle("Slowy"); t.hide(); t.size=6; t.numlegs=4; System.out.println(t); System.out.println(t.equals(komodo)); } } public class Animal { public String name; public boolean equals(Animal other) { return other.size==this.size; } public Animal(String s) { name=s; } public void setName(String n) { this.name=n; } public void eat(String meal) { System.out.println("chump chump yummy "+meal); } public int size; public String toString() { return "I am "+name+" and I''m "+size+" cm long"; } } public class Reptile extends Animal { public Reptile(String n) { super(n); numlegs=0; } public Reptile(String n, int l) { super(n); numlegs=l; } public void bask() { System.out.println("basking..."); } public String toString() { return super.toString()+numlegs+" legs"; } public int numlegs; } public class Turtle extends Reptile { public Turtle(String n) { super (n,4); shellColor="Brown"; } public void hide() { System.out.println("you cant see me"); } public String toString() { return super.toString()+" and my shell is"+ shellColor; } public String shellColor; public void bask() { super.bask(); System.out.println("turtle is basking..."); } }


Cada clase hereda la clase Object silenciosamente. Y la clase Object tiene un método equals . Entonces, si cualquier clase no anula el método equals entonces usará la implementación predeterminada de Object.equals.

Del doc

El método equals para la clase Object implementa la relación de equivalencia más discriminatoria posible en los objetos; es decir, para cualquier valor de referencia no nulo x e y, este método devuelve verdadero si y solo si xey se refieren al mismo objeto (x == y tiene el valor verdadero).

Del código fuente de Object.equals

public boolean equals(Object obj) { return (this == obj); }

Entonces, si algún objeto no tiene su propia implementación de iguales, entonces el método equals simplemente comprobará si la referencia del objeto es igual o no.

Así que obtenga el resultado deseado de los iguales que necesita implementar por su cuenta, como ya se sugirió en otra respuesta


Para su pregunta sobre cómo sabe java cómo comparar objetos, debe anular el método de igualdad

public boolean equals(Object other){ // return true or false based on your logic }

Mientras se compara, se usa el método igual. Puedes echar un vistazo a este buen tutorial que explica la importancia del método igual.

http://www.thejavageek.com/2013/06/26/what-is-the-significance-of-equals-method-in-java/

Además, solo anular equivalentes no es suficiente si está utilizando objetos en colecciones que usan hash. Encontrará un buen tutorial en

http://www.thejavageek.com/2013/06/28/significance-of-equals-and-hashcode/


No anula el método Object#equals , pero lo sobrecarga. En su declaración de método, utiliza Animal tipo Animal lugar de Object :

public boolean equals(Animal other)

Una buena anulación del método sería usar el operador instanceof . Mostrando un ejemplo:

@Override public boolean equals(Object other) { if(other instanceof Animal) { Animal otherAnimal = (Animal)other; //comparison logic... } return false; }

Más información sobre el tema:

  • Las mejores prácticas con respecto a iguales: ¿sobrecargar o no sobrecargar?
  • Overriding Object.equals VS Sobrecargándolo