gpt4 book ai didi

java - java 中的 map 和自定义对象

转载 作者:行者123 更新时间:2023-12-01 23:28:37 25 4
gpt4 key购买 nike

我正在尝试下面的代码。

class dog{
private String name;
public dog(String n){
name = n;
}
public String getname(){ return name; }
public void setname(String n){ name =n;}
public boolean equals(Object o){
//if (( o instanceof dog )&& (((dog)o).name == name)) return true;
if (( o instanceof dog )&& (((dog)o).name.equals(name))) return true;
else return false;
}

public int hashcode(){
return name.length();
}
public String toString(){
return "Name:"+name;
}
}

这是我的 Dog 类(class)。现在在 Main 方法中,我尝试执行以下操作

Map<Object,Object> m = new HashMap <Object, Object>();

dog p = new dog("GM");
dog q = new dog ("GM");
System.out.println(p.equals(q));
m.put ( new dog("GM"),"K2");

System.out.println(m.get(new dog("GM")));

我得到一个 true 值和一个 null 值。我期待的是 K2 而不是 null 。有人可以帮我解决这个问题吗?我已经重写了 hashcode 和 equals 方法。我缺少什么??

编辑:-更改了 equals 函数。结果相同。

最佳答案

直接的问题是 hashCode 需要大写的 C,您正在使用小写的 c 实现 hashcode .

((dog)o).name == name 比较字符串的身份。这意味着,如果您有字符串 "GM" 的两个实例,它们将彼此 .equals(),但不会 ==

关于java - java 中的 map 和自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19648867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com