假设我有一个代码段:
package practice;
import java.util.*;
public class Practice {
public static void main(String[] args) {
Map<Temp,Integer> m = new HashMap<>();
m.put(new Temp(1,2), 5);
m.put(new Temp(1,2), 6);
System.out.println(m.size());
}
}
class Temp {
int x, y;
public Temp(int a, int b) {
this.x = a;
this.y = b;
}
}
输出:2
我正在尝试更新对象new Temp(1,2)
对应的值,但它正在插入而不是替换它。这就是大小为2
的原因。如何替换旧值?
答案 0 :(得分:1)
默认情况下,Java会比较引用,除非您实现equals
和hashCode
方法:
class Temp {
// ...
public boolean equals(Object obj) {
Temp temp = (Temp)obj;
return temp.x == this.x && temp.y == this.y;
}
public int hashCode() {
return Objects.hash(this.x, this.y);
}
}
然后:
System.out.println(m.size()); // 1