java中==和equlas区别

==和euqals

要区分==和equals首先我们要知道==是对地址值进行比较,equals在常用的String类中我们似乎看到的是对两个字符串的值是否相等进行比较

要区分这两者到底有何不同,需要简单看一下Object和String的源码

Object源码

//Obejct中的equlas
public boolean equals(Object obj) {
    return (this == obj);
    }

String源码

//String中的equals
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }

  • Object中可以明显看出equals方法通过==进行地址值的比较,可以看出equals和==在这里没有区别
  • String重写了equals方法后仍然通过==进行地址值的比较,但是增加了值比较的判定条件,在String类中equals并不能和==相提并论

总结

从上面条件我们可以得出结论
1. equals本质是对地址值进行比较和==没有什么区别
2. 在平常业务处理中我们经常会对equals和hashcode方法进行重写,重写后的equals增加新的业务判断逻辑,不能与==划上等号
3. equals和==是否有区别取决于我们平日业务逻辑的制定,不能随口臆断

猜你喜欢

转载自blog.csdn.net/slowly_man/article/details/80480931