重写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 }
想多了都是问题,做多了才是答案

浙公网安备 33010602011771号