Object 类的 equals 方法
public boolean equals(Object anObject)
//其他对象 是否与此对象"相等"
//源码
public boolean equals(Object anObject){
return (this == obj)
}
//==比较运算符
//基本数据类型:比较的是值
//引用数据类型:比较的是地址值
//(而只要是使用双引号定义的字符串【不管有没有加static】 都是在字符串常量池中共享的)
重写equals 方法,比较对象属性
- equals()方法 默认比较两个对象地址值 ---->没什么意义
- 对象才有 equals()方法,基本类型没有 equals()方法
- 重写 equals()方法 ,让他 比较两个对象 属性。
- 问题:存在一个多态的问题,父类 object 不能访问子类方法
- 解决:向下转型( 把object 转为 子类对象)
public class Student {
private String name;
private int age;
//重写 equals 方法 比较两个对象的属性
@Override
public boolean equals(Object obj) {
if(null == obj) //提高效率
return false;
if(obj instanceof Student) {
Student student = (Student) obj;
return this.name.equals(student.name)
&& this.age == student.age;
}
return false;
}
}
//重写 equals 方法 比较两个对象的属性 源码
@Override
public boolean equals(Object obj) {
if (this == null ||getClass()!=obj.getClass()) //反射
return false;
Student student = (Student) obj;
return this.name.equals(student.name)
&& Objects.equals(name,student.name);
//这里使用 Objects 中的 equals 方法
}
Object 中的 equals方法
//源码 防止空指针异常
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}