重写equals方法
字符串比较内容。
// Eclipse快捷键 : 快速重写equals Alt+Shift + S -> h
// 重写了Object类中的equals方法
// stu1.equals(stu2)
// stu1:this
// stu2:obj
@Override
public boolean equals(Object obj) {
// 通过==比较两者 因为是引用数据类型 所以比较地址值 地址值相同是同一个对象
if (this == obj)
return true; // 同一个对象 内容一致
// 判断obj是否为空
if (obj == null)
return false; // stu1能直接调用方法说明stu1不为空 而stu2为null 两者肯定不相同
// 判断是否是相同类型
if (getClass() != obj.getClass())
return false; // 例如:狗对象和学生对象 肯定内容不一样 没必要比较
// 向下转型(强转) int num = (int)10.1;
// 将stu2转换为Student类型的对象
Student other = (Student) obj;
// 比较stu1的名字是否为空 this.name
if (name == null) {
// 如果为空 判断stu2的名字是否为空 如果stu2的名字不是null 则无需比较了
if (other.name != null)
return false;
// 如果name都不为空 那么通过字符串的equals方法来直接比较名字的内容是否相同
} else if (!name.equals(other.name))
return false; // 如果name不一样 其他属性不用再比了
// 比较学生编号 如果学生编号不一致 返回false
if (stuNo != other.stuNo)
return false;
// 如果最终走到这里 说明他们的两个属性内容确实完全一致 返回true
return 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;
}
equals和==的区别
默认情况下 equals和==都是一样的。
但是String重写了equals方法,可以比较字符串的内容了。
== 它比较引用数据类型比较的是地址值。 stu2 == stu3(X)
== 它比较基本数据类型比较的是内容。 10 == 12(√)