首页 > 其他 > 详细

==和equals()的区别

时间:2021-03-14 10:21:30      阅读:28      评论:0      收藏:0      [点我收藏+]

==和equals()的区别

一、==

==作比较,如果是值类型,则是比较值是否相等;如果是引用类型的话,则是判断两个对象的内存地址是否相同。

注:对几个基本数据类型来说,是作为常量在方法区中的常量池里面以HashSet策略存储起来的。在常量池中,一个常量对应一个地址,因此不管是多少个变量的值相同(int a=1,b=1),它们的地址是指向同一个的(a和b的地址相同)

int a=1;
int b=1;
System.out.println(a==b);           //a与b的地址相同,值相同

二、equals

equals用于引用类型对象之间的比较。equals()比较的不一定是对象的内容,有两种情况:

1.没有重写equals(),这时比较的还是对象的内存地址

//这是Object类中的equals()
public boolean equals(Object obj) {
    return (this == obj);
}

2.重写了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;
}

//这是Integer类中的equals()
public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
}

这篇文章参考了CSDN的CoderLC的文章

网址:https://blog.csdn.net/lcsy000/article/details/82782864

==和equals()的区别

原文:https://www.cnblogs.com/RedMapleLeafAndGreenTea/p/14531427.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!