我正在尝试HashMap为hashcode和equals方法创建自定义对象并编写代码。在 中添加对象时HashMap,equalsmethod 为 true 并且hashcode为两个对象返回相同的值,但HashMap将两个对象添加为不同的对象。这怎么可能?下面是我的代码:
class B {
String name;
int id;
public B(String name, int id)
{
this.name=name;
this.id=id;
}
public boolean equals(B b){
if(this==b)
return true;
if(b==null)
return false;
if(this.name.equals(b.name) && this.id==b.id)
return true;
else
return false;
}
public int hashcode(){
return this.id;
}
public String toString(){
return "name: "+name+" id: "+id;
}
}
为了测试上面的代码,我在主类中添加了以下内容:
HashMap<B,String> sample=new HashMap<>();
B b1 = new B("Volga",1);
B b2 = new B("Volga",1);
System.out.println(b1.equals(b2));
System.out.println(b1.hashcode()+" "+b2.hashcode());
sample.put(b1, "wrog");
sample.put(b2,"wrog");
System.out.println(sample);
这将产生以下输出:
true
1 1
{name: Volga id: 1=wrog, name: Volga id: 1=wrog}
有人可以解释为什么会这样吗?
慕妹3146593
相关分类