我刚刚开始使用Java工作,并试图通过重写equals方法来比较两个对象。我已经调试了很长一段时间,试图理解为什么它会一直返回错误。
我已将其剥离以使其非常清楚。正如你在图片中看到的那样,所有内容都匹配在else if条件中..为什么它在返回false?!:
public boolean equals(Object obj) {
if(obj == null)
return false;
if(getClass() != obj.getClass())
return false;
final User user = (User)obj;
int h1 = CalculateByteArray(this.macAddress);
int h2 = CalculateByteArray(user.macAddress);
char[] c1 = this.userName.toCharArray();
char[] c2 = user.userName.toCharArray();
if(this.userName == null || this.macAddress == null){
if(user != null)
return false;
} else if(c1 != c2 || h1 != h2)
return false;
return true;
}
答案 0 :(得分:4)
阵列彼此不是==
。
您想要的是使用Arrays.equals()
。或者,在您的情况下,!Arrays.equals()
,c1
和c2
。
答案 1 :(得分:4)
c1
和c2
是对象,else if(c1 != c2 || h1 != h2)
比较引用。您应该使用Arrays.equals(c1,c2)
答案 2 :(得分:3)
而不是
if(c1 != c2 || h1 != h2)
使用
if(!Arrays.equals(c1,c2) || h1 != h2)
Arrays.equals
用于比较数组,因为在你的情况下c1和c2是数组,你应该使用它。
答案 3 :(得分:2)
问题在于比较两个char
数组的方式。请改用!Arrays.equals(c1, c2)
。