简单的问题。我有一个对象:
class User {
int id;
String username;
public User() {
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
@Override
public String toString() {
return id + " - " + username;
}
@Override
public int hashCode() {
int hash = 7;
hash = 31 * hash + this.id;
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final User other = (User) obj;
return this.id == other.id;
}
public void setUsername(String username) {
this.username = username;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public int getId() {
return id;
}
}
根据int id
(它是一个数据库 id)确定谁的相等性。
Netbeans 自动生成了这个hashCode()
方法:
@Override
public int hashCode() {
int hash = 7;
hash = 31 * hash + this.id;
return hash;
}
问题是:与仅返回(已经) unique 相比,这有什么优势int id
吗?
@Override
public int hashCode() {
return id;
}
无论哪种方式,碰撞都是不可能的。
正确的?