一、代码分析
(一)使用的类
1. Student类
2. MethodEquals类
(二)Student类
(1)成员变量
①姓名(name)
②年龄(age)
③性别(gender)
(2)构造器(又称构造方法)
①说明:快速生成构造方法的快捷键为“Alt + Insert”,后选择“Constructor”。
②构造方法的分类:
a.无参构造函数
b.有参构造函数
③作用:
用来对对象进行初始化。
(3)成员方法(重写 Object类的方法)
①public String toString()
a. 快速生成的快捷键为“Alt + Insert”。一般重写父类方法的快捷键为“Ctrl + O”。但这里toString、 equals、hashCode方法的重写一般使用“Alt + Insert”。
b. toString方法如果没有重写,那么输出一个对象的toString方法,得到的结果是“包名+类名+@+哈希值的16进制”。
②public boolean equals(Object o)
a.快速生成的快捷键为“Alt + Insert”
b.Object类是所有类的父类,因此也称为超类。
c.如果equals方法没有在子类中重写时,主程序中两个对象比较的是“内存地址”。重写后可选择对象比较的属性。
③public int hashCode()
//2022.7.26
import java.util.Objects;
public class Student {
private String name;
private int age;
private char gender;
//构造器
public Student() {
}
public Student(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
//toString 方法重写
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
//重写equals与hascode方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
gender == student.gender &&
name.equals(student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
}
(三)MethodEquals类
1. 分析
(1)作用:
主程序的入口,用来测试equals方法。
(2)代码分析:
①创建了三个学生对象,并进行初始化。
②先用“==”比较了两个对象是否相等。注:此处“==”是比较两个对象在内存中的地址是否相等。
③后使用equals方法进行比较两个对象是否相等。
//2022.7.26
public class MethodEquals {
public static void main(String[] args) {
Student s1 = new Student("张三", 23, '男');
Student s2 = new Student("张三", 23, '男');
Student s3 = new Student("张三", 26, '男');
//下面这三个比较的是地址
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s2 == s3);
//使用equals方法进行比较
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
}
}
二、运行结果
可知,equals方法重写后,比较的是重写方法中两个对象 的属性值。