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。

阅读更多
文章标签: Java String equals
个人分类: java基础
想对作者说点什么? 我来说一句

==运算符Equals()方法区别

2010年11月21日 42KB 下载

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭