总结的来说:
1)对于==,比较的是值是否相等
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,所有类从Object类中继承equals方法,比较的是是否是同一个对象
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
可以举个简单的例子,
String a=new String("abc"),
String b=new String("abc"),
a.equals(b)返回true,
a= =b返回false,
这就是区别,equals()本质上还是= =,只是String 和 Date等重写了equals()方法
equals本身和==没有区别,对于基本数据都是比较值,对于对象都是比较是否为内存地址,其他类在继承Object类之后对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;
}
//Object中的
public boolean equals(Object obj) {
return (this == obj);
}