== 可以比较基本类型,也可以比较对象类型
基本类型的比较,可以简单理解为字面值的比较,值相等则返回true。比如:
int a = 10;
int b = 10;
a == b;//true
比较对象类型的时候,比较的是变量(栈)内存中存放的对象的(堆)内存地址,即是否是指相同一个对象。
Integer i = 5;
Integer j = 5;
i == j;//false,i与j虽然值相同但是地址指向的堆内存地址不同
equals 只能比较引用类型
Object中的equals,底层就是使用==进行比较,比较对象的地址是否相同。
Object类中的equals()方法是这样写的
public boolean equals(Object obj){
return (this == obj);
}
但是平时用的多的还是其他类重写后的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()方法比较的就是字符串的内容了。`