重写Object类的equals方法以及Objects类的equals方法
重写Object类的equals方法
Object类中的equals方法默认比较的是两个对象的地址值,没有任何意义
所以要重写equals方法,比较两个对象的属性值,如果对象的属性值相同则返回true,否则返回false。
public class Person { private String name; private int age; // @Override // public String toString() { // return "Person{" + // "name='" + name + '\'' + // ", age=" + age + // '}'; // } @Override public boolean equals(Object o) { //增加一个判断,是Person类型的再转换, if (o instanceof Person){ //使用向下转型(强转),把object类型转换为Person Person p = (Person) o; boolean b = this.name.equals(p.name) && this.age == p.age; return b; } return false; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } }
public static void main(String[] args) { Person person = new Person("张三",20); Person person1 = new Person("张三", 20); boolean b = person.equals(person1); System.out.println(b); }
运行结果:

因为引用数据类型的默认值为null,如果我们使用equals传递的是null
public static void main(String[] args) { Person person = new Person("张三",20); Person person1 = new Person("张三", 20); // boolean b = person.equals(person1); boolean b = person.equals(null); System.out.println(b); }
我们可以在equals中添加判断传递的值是否为空
@Override public boolean equals(Object o) { if (o==null){ return false; } //增加一个判断,是Person类型的再转换, if (o instanceof Person){ //使用向下转型(强转),把object类型转换为Person Person p = (Person) o; boolean b = this.name.equals(p.name) && this.age == p.age; return b; } return false; }
如果传递的值为空那么就可以直接返回false,不需要进行下面的语句,提高了程序的执行效率
如果我们使用equals传递的是对象本身,那么就不要执行强转的if判断,可以直接返回true
@Override public boolean equals(Object o) { //如果传递的值时对象本身 if (o==this){ return true; } //如果传递的值为null if (o==null){ return false; } //增加一个判断,是Person类型的再转换, if (o instanceof Person){ //使用向下转型(强转),把object类型转换为Person Person p = (Person) o; boolean b = this.name.equals(p.name) && this.age == p.age; return b; } return false; }
Objects类的equals方法
public static void main(String[] args) { String s1 = null; String s2 = "aaa"; boolean equals = s1.equals(s2); System.out.println(equals); }
如果我们将两个要比较的字符串中的某一个值设为空,并调用equals方法进行比较,那么他就会报异常

这个时候就需要使用Objects中equals方法
public static void main(String[] args) { String s1 = null; String s2 = "aaa"; // boolean equals = s1.equals(s2); boolean equals = Objects.equals(s1, s2); System.out.println(equals); }
调用equals方法并将两个字符串进行参数赋值

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号