比较java中的对象失败

时间:2016-04-08 11:27:05

标签: java equals

我刚刚开始使用Java工作,并试图通过重写equals方法来比较两个对象。我已经调试了很长一段时间,试图理解为什么它会一直返回错误。

我已将其剥离以使其非常清楚。正如你在图片中看到的那样,所有内容都匹配在else if条件中..为什么它在返回false?!:

enter image description here

 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;
}

4 个答案:

答案 0 :(得分:4)

阵列彼此不是==

您想要的是使用Arrays.equals()。或者,在您的情况下,!Arrays.equals()c1c2

答案 1 :(得分:4)

c1c2是对象,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)