==解读
对于基本类型和引用类型==的作用效果不同
- 基本类型:比较的是指是否相同
- 引用类型:比较的是引用是否相同
equals解读
equals本质上是==,只不过String和Integer等重写了equals方法,把它变成了值比较。
public class Cat {
public Cat(String name) {
this.name = name;
}
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public static void main(String[] args) {
Cat cat1 = new Cat("123");
Cat cat2 = new Cat("123");
System.out.println(cat1.equals(cat2));//false
}
}
Object的equals源码(本质上是==)
public boolean equals(Object obj) {
return (this == obj);
}
相同值的两个String对象,返回的是true
String str1 = new String("123");
String str2 = new String("123");
System.out.println(str1.equals(str2));//true
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;
}
String重写了Object的equals方法,比引用比较改成了值比较。
总结:==对于基本类型来说是值比较,对于引用类型来说是引用比较;而equals默认是引用比较,很多类重写了equals方法,比如String,Integer等把它变成了值比较,所以一般情况equals比较的是值相等。