Fala ae pessoal,
estou com dúvida em um exemplo que vi no livro de certivicação, segue o código:
package teste;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
/**
* @param args
*/
public static void main(String[] args) {
Map<Object, Object> m = new HashMap<Object, Object>();
m.put("k1", new Dog("aiko"));
m.put("k2", Pets.DOG);
m.put(Pets.CAT, "CAT key");
Dog d1 = new Dog("clover");
m.put(d1, "Dog key");
m.put(new Cat(), "Cat key");
System.out.println(m.get("k1"));
String k2 = "k2";
System.out.println(m.get(k2));
Pets p = Pets.CAT;
System.out.println(m.get(p));
System.out.println(m.get(d1));
System.out.println(m.get(new Cat()));
System.out.println(m.size());
d1.name = "magnikua";
System.out.println(m.get(d1));
d1.name = "clover";
System.out.println(m.get(new Dog("clover")));
d1.name = "arthur";
System.out.println(m.get(new Dog("clover")));
}
}
class Dog {
public Dog(String n) { name = n; }
public String name;
public boolean equals(Object o) {
if((o instanceof Dog) &&
((Dog)o).name.equals(name)) {
return true;
}
return false;
}
public int hashCode() {
return name.length();
}
}
class Cat { }
enum Pets { DOG, CAT, HORSE }
porque nos 2 últimos System.out.println o método equals de Dog é chamado e quando eu passo só a referencia d1, não e?
muito obrigado!