一、先说结论:
1.1、 ==对于基本类型:比较的是值是否相等。
1.2、 ==对于引用类型:比较的是内存地址值是否相等。
2、 equals()是方法,只能用于引用类型的比较:默认情况下比较内存地址是否相等,
如果重写了equals方法的类比较的是值是否相等。
int a = 1;
int b = 1;
System.out.println(a==b); //true
Person p1 = new Person("a",1);
Person p2 = new Person("a",1);
System.out.println(p1==p2); //false
基本类型:boolean、byte、char、short、int、float、long、double、
引用类型:除基本类型外都是、
二、解释:
首先你需要知道 equals() 是Object类的一个方法,因为Object是所有类的父类,所以所有类都继承了 equals() 这个方法。
//Object类的源码
public boolean equals(Object obj) {
return (this == obj);
}
由源码可知equals()方法内部其实还是用的==比较,所以默认情况(未重写equals)下还是比较内存地址是否相等。
但重写了equals()方法的类则比较的是值是否相同,例如:String,Integer等就重写了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;
}
所以,equals()比较就看一点,有没有重写equals,有比较的是值是否相等,没有比较的则是内存地址是否相等。