1)"=="用来比较两个变量的值是否相等。也就是说,该运算符用于比较变量对应内存中的所存储的值是否相等,要比较两个基本类型的数据或者两个引用变量是否相等,只能用“==”来比较
2)Java的数据类型包括8种基本数据类型和引用类型,如果涉及两个基本类型的比较,必须满足它们是相同的基本数据类型,否则没有可比性,==直接比较它们的值是否相等,而对于对象的比较,那么涉及两块内存,对象本身的堆内存,变量也占用一块内存(栈内存),例如:String s=new String(),变量s所对应的内存存储的数值就是对象占用的那块内存首地址。对于两个不同的对象,“==”比较永远为false,不能实现比较两个对象的内容是否相等
3)equals是Object类提供的方法,每个Java类都继承来及Object类,所以每一个对象都有equals方法。下面是Object的equals方法底层源码实现:
从源码可以知道是直接用“==”运算符比较实现的,也就是比较两个对象,所以在没有重写Object类的equals方法情况下,equals(Object)和==一样,比较引用
我们看看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类重写了equals方法,实现对象中值的比较,那么在开发过程中,我们也可以重写equals方法,实现两个对象比较
浙公网安备 33010602011771号