equals()方法和“==”运算符的区别

equals()

java中默认的equals()方法的实现来自于Object类,主要用于比较两个对象是否相等,实现如下:

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

首先我们必须明确一点就是:equals()是方法“==”是运算符。

        对于对象都有内存地址和数据,“==”是比较两个对象的内存地址,所以说Object类的equals()方法是用来比较两个对象的地址是否相等的,当返回为true时,实际上是表示引用了同一个对象。在大多数情况下Object中的equals()方法是可以满足我们的基本需求的,但是有时候需要多我们自定义的对象进行比较,这个时候就需要我们主观上的覆写equals()方法。

        在JDK中大多数类都对Object中的equals()方法进行了覆写,下面我们以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;
}

最直接的就是比较字符(内容)是不是都相同,不是引用。其他的封装类大都类似!

equals()方法和“==”运算符的比较

经常误用的原因分析:

有两种用法:1.字符串        2.非字符串

(1)字符串变量
        "equals()"方法:比较字符串的每个字符(内容)
        “==”比较两个变量本身的值,两个对象在内存中的首地址

结果:false     true    true     true
str1和str2地址不等,内存相等

str3和str4地址和内存都相等。由于str3和str4是两个字符串常量所生成的变量,其中所存放的内存地址是相等的,所以s3==s4是true。

特别的:对于StringBuffer

结果都是false;

原因:StringBuffer没有覆写Object的equals()方法。而Object类中的equals方法是用来比较“地址”的,所以结果为false。

(2)非字符串变量
        "=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即是否是引用同一个对象。


结果都是false;

注意添加一句    e1=e2;

结果就全是true;

总之

equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。
== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。
String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值