本文参考各路大牛,但是加入了自己的个人理解,用比较简洁的笔墨介绍了两者区别。
1.“==”
(1)比较基本数据类型时,数值相等则为true;
(2)比较引用数据类型时,实际上比的是对象的地址值,地址相等则为true,否则为false;
&但是要特别留意Sring类对象,由于内存常量池的存在,导致下面情况也返回true,同一个对象,同一个地址;
2.equals方法
1.首先equals方法是Object类中的方法,其源码如下:
public boolean equals(Object obj) {
return (this == obj);
}
由源码可以看出可见默认的equals方法,直接调用==,比较对象地址,本质是和“==”一样的。
2. 然而大部分类都有重写equals方法,比如如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。尤其是String 算是面试高频考点了。记住就好
下面附上String类equals方法的源码,有兴趣可以研究下:
public boolean equals(Object anObject) {
//判断地址值是否相等
if (this == anObject) {
return true;
}
//判断对象类型是否为String
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;
}