equals方法和==关系

晚上翻了一下equals和==

==

  对象使用==比较两个对象内存地址是否相等

  基本类型使用==比较两个基本类型内容是否相等

  为什么对象使用==和基本类型使用==不太一样是因为jvm编译时决定的

equals

  object类中equals方法是这样的:

public boolean equals(Object obj) {
    return (this == obj);
}

 

根据上面代码可以看出,如果两个对象使用equals方法比较,和直接使用==是一样的效果,比较两个对象的内存地址

但是在比较两个String字符串是否相等时,一般会使用equals,这是为什么?因为String将equals进行了重写,代码如下:

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

通过代码可以看出,先比较内存地址,内存地址相等就不用往下比了,如果内存地址不相等,判断被比较的对象是不是String类型,是的话再比较长度,最后在比较字符数组是否一致。

Integer中也对equals方法进行了重写。

结论

基本类型使用==进行比较,比较的内容

对象使用==和未重写的equals比较的都是地址,在这equals和==是一样的,因为equals就是调用了==进行比较

重写的equals各有各的内容,String和Integer等都是比较的内容。

如果你想比较两个对象,认为属性相等就是一个对象,可以进行重写equals。

不对之处,还望指正,谢谢。

 

posted @ 2018-03-08 01:20  我爱学习也有错吗  阅读(102)  评论(0)    收藏  举报