java 重写Object类的equals方法
直接打印对象的地址值没有意义,需要重写Object类中的toString方法
打印对象的属性(name,age)
1 2 3 4 5 6 7 8 9 10 11 12
| @Override public String toString() { return "Person{name="+name+" ,age="+age+"}"; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }
|
Object类的equals方法,默认比较的是两个对象的地址值,没有意义
所以我们要重写equals方法,比较两个对象的属性(name,age)
问题:
隐含着一个多态
多态的弊端:无法使用子类特有的内容(属性和方法)
Object obj = p2 = new Person("古力娜扎",19);
解决:可以使用向下转型(强转)把obj类型转换为Person
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Override public boolean equals(Object obj) { if(obj==this){ return true; }
if(obj==null){ return false; }
if(obj instanceof Person){ Person p = (Person)obj; boolean b = this.name.equals(p.name) && this.age==p.age; return b; } return false; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package com.itheima.demo01.Object;
import java.util.ArrayList;
public class Demo02Equals { public static void main(String[] args) {
Person p1 = new Person("迪丽热巴",18); Person p2 = new Person("迪丽热巴",18); System.out.println("p1:"+p1); System.out.println("p2:"+p2);
ArrayList<String> list = new ArrayList<>();
boolean b = p1.equals(p1); System.out.println(b); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package com.itheima.demo01.Object;
import java.util.Objects;
public class Person { private String name; private int age;
public Person() { }
public Person(String name, int age) { this.name = name; this.age = age; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); }
@Override public int hashCode() {
return Objects.hash(name, age); }
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; } }
|