目录
- [== 比较的是栈中的值](#== 比较的是栈中的值)
- Object中的equals就是用==比较
- 平时用到的equals都是经过了重写的
== 比较的是栈中的值
==其实是比较的栈中的值;
基本数据类型比较的是数值
引用类型比较的是堆内存中的对象地址
Object中的equals就是用==比较
下面的代码就是Object类的源码;
所以如果我们调用了Object中的equals方法进行比较,又没有进行重写,其实就相当于使用==进行比较。
java
public boolean equals(Object obj) {
return (this == obj);
}
平时用到的equals都是经过了重写的
我们平时用到最多的应该就是String类的equals方法;
下面是源码:
java
public boolean equals(Object anObject) {
//引用地址相等,说明是一个对象,直接返回true
if (this == anObject) {
return true;
}
//判断是不是String,不是String的话肯定不会和String相等
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是代表值相等,就是String默默重写了equals方法,从而让我们产生了错觉。
所以,如果我们自定义的对象要做比较,需要重写equals方法来定义比较规则,否则就是按照==进行比较。