java ==和equals()的关系

1. 两者最大的区别

==能比较基本数据类型,也能比较引用数据类型;
equals()只能比较引用数据类型。

2. 对于基本数据类型,== 比较的是两者的值是否相同

int a = 8;
int b = 8;
int c = 9;
System.out.println("a == b : " + (a == b)); //true
System.out.println("a == c : " + (a == c)); //false

3. 对于引用数据类型(重点)

== 比较的是存储对象的内存地址
equals()本质上就是 == ,Object中equals()的源码如下:

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

那么问题来了,下面的情况是怎么回事?

String str1 = "8";
String str2 = "8";
String str3 = new String("8");
// ==
System.out.println("str1 == str2 : " + (str1 == str2));
System.out.println("str1 == str3 : " + (str1 == str3));
// equals()
System.out.println("str1.equals(str2) : " + str1.equals(str2));
System.out.println("str1.equals(str3) : " + str1.equals(str3));

结果如下:

str1 == str2 : true
str1 == str3 : false
str1.equals(str2) : true
str1.equals(str3) : true

其实,这是因为String类重写了equals()方法,源码如下:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (!COMPACT_STRINGS || this.coder == aString.coder) {
                return StringLatin1.equals(value, aString.value);
            }
        }
        return false;
    }

以上三点是我的理解,欢迎路过的高人发表看法!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容