重写equals方法

 1 package com.Object;
 2 
 3 /*
 4     如何重写equals方法
 5 应用实例:判断两个Person对象的内容是否相等;
 6 如果两个Person对象的各个属性值都一 样,则返回true,反之false。
 7 */
 8 public class equals01 {
 9     public static void main(String[] args) {
10 
11         Person person1 = new Person("张三", 23, '男');
12         Person person2 = new Person("张三", 23, '男');
13         System.out.println(person1 == person2);//false
14         System.out.println(person1.equals(person2));//false
15         //person1.equals(person2)出现错误的原因是:这个equals用的Person继承的是Object类
16         //Object默认的是比较是否是同一个对象,所以出现错误,修改的办法是重写equals方法
17 
18         System.out.println(person1.equals(person2));
19     }
20 
21 }
22 
23 class Person {
24     private String name;
25     private int age;
26     private char gender;
27 
28     public Person(String name, int age, char gender) {
29         this.name = name;
30         this.age = age;
31         this.gender = gender;
32     }
33 
34                 //重写Object的equals方法
35     public boolean equals(Object object) {
36         //比较两个对象是否为同一个对象,如果是,直接返回真
37         if (this == object) {
38             return true;
39         }
40         //进行类型的判断:判断object是否是Person
41         if (object instanceof Person) {
42             //进行向下转型,需要得到obj的各个属性值
43             Person p = (Person) object;
44             return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
45         }
46         return false;
47     }
48 
49 
50     public String getName() {
51         return name;
52     }
53 
54     public void setName(String name) {
55         this.name = name;
56     }
57 
58     public int getAge() {
59         return age;
60     }
61 
62     public void setAge(int age) {
63         this.age = age;
64     }
65 
66     public char getGender() {
67         return gender;
68     }
69 
70     public void setGender(char gender) {
71         this.gender = gender;
72     }
73 }

案列分析

 1 package com.Object;
 2 
 3 public class equals02 {
 4     public static void main(String[] args) {
 5         Person01 p1 = new Person01();
 6         p1.name = "nzmedu";
 7         Person01 p2 = new Person01();
 8         p2.name = "nzmedu";
 9         //判断下面的真假
10         //==有两种类型,引用类型和基本类型,这里是引用类型,引用类型比较的是对象是否为同一个
11         System.out.println(p1 == p2);//false
12         //p1.name和p2.name两者都是字符串,已经把equals方法进行重写,所以两者比较的是内容是否相同
13         System.out.println(p1.name.equals(p2.name));//true
14         //p1.equals(p2)出现错误的原因是:这个equals用的Person继承的是Object类
15         //Object默认的是比较是否是同一个对象
16         System.out.println(p1.equals(p2));//false
17 
18         String s1 = new String("curry");
19         String s2 = new String("curry");
20         System.out.println(s1.equals(s2));//true
21         System.out.println(s1 == s2);//false
22     }
23 }
24 
25 class Person01 {
26     public String name;
27 }

 案列分析03;

 1 package com.Object;
 2 
 3 public class equals03 {
 4     public static void main(String[] args) {
 5         int a= 65;
 6         float b=65.0f;
 7 
 8         System.out.println(a==b);//true,基本数据类型,值相等
 9         char c1 ='A';  char c2 = 12;
10         System.out.println((a==c1));//true,基本数据类型,A的ASCII码为65
11         System.out.println(12==c2);//true
12         String s1 = new String("hello");
13         String s2 = new String("hello");
14         System.out.println(s1==s2);//false,对象不一样
15         System.out.println(s1.equals(s2));//true;字符串类型的equals方法已经重写,内容相同
16        // System.out.println("hello"==new java.sql.Date());
17     }
18 }

 

posted @ 2022-03-09 09:39  捞月亮的渔夫  阅读(250)  评论(0)    收藏  举报