我有一个用于存储对象的HashMap:
private Map<T, U> fields = Collections.synchronizedMap(new HashMap<T, U>());
Run Code Online (Sandbox Code Playgroud)
但是,当试图检查密钥的存在时,containsKey方法返回false.
equals和hashCode方法已实现,但找不到密钥.
调试一段代码时:
return fields.containsKey(bean) && fields.get(bean).isChecked();
Run Code Online (Sandbox Code Playgroud)
我有:
bean.hashCode() = 1979946475
fields.keySet().iterator().next().hashCode() = 1979946475
bean.equals(fields.keySet().iterator().next())= true
fields.keySet().iterator().next().equals(bean) = true
Run Code Online (Sandbox Code Playgroud)
但
fields.containsKey(bean) = false
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种奇怪的行为?
public class Address extends DtoImpl<Long, Long> implements Serializable{
<fields>
<getters and setters>
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + StringUtils.trimToEmpty(street).hashCode();
result = prime * result + StringUtils.trimToEmpty(town).hashCode(); …Run Code Online (Sandbox Code Playgroud)