String类也有equals方法,该方法是比较字符串的内容(equals方法,默认被String类重写了)
    image.png
    image.png
    重写Object类中的equals方法,快捷键:
    image.png
    然后一直点击next即可
    image.png
    最后删除重写的hashCode方法
    image.png

    1. package com.itheima.d9_api_object;
    2. /**
    3. * 目标:掌握Object类中equals方法的使用
    4. */
    5. public class Test2 {
    6. public static void main(String[] args) {
    7. Student s1 = new Student("lxc",'男',19);
    8. Student s2 = new Student("lxc",'男',19);
    9. // 虽然s1和s2有有参构造器的内容一样,但是他们是两个新对象,都在堆内存中开辟了空间
    10. // 内存地址不一样
    11. // equals默认比较2个对象的地址是否相同
    12. System.out.println(s1.equals(s2)); // flase对象地址不一样
    13. System.out.println(s1 == s2); // == 也是比较地址
    14. // 重写了equals方法,再次运行比较的就是对象内容
    15. }
    16. }
    1. package com.itheima.d9_api_object;
    2. import java.util.Objects;
    3. public class Student { // extends Object 默认继承了Object类
    4. private String name;
    5. private char sex;
    6. private int age;
    7. public Student() {
    8. }
    9. public Student(String name, char sex, int age) {
    10. this.name = name;
    11. this.sex = sex;
    12. this.age = age;
    13. }
    14. @Override
    15. public boolean equals(Object o) {
    16. // 官方定义的重写equals方法,用来比较内容
    17. // 1.判断是否是同一个对象比较,如果是返回true
    18. if (this == o) return true;
    19. // 2. 如果0是null返回false 如果o不是学生类型返回false ...Student != ..Pig
    20. if (o == null || getClass() != o.getClass()) return false;
    21. // 3.说明o 一定是学术类而且不为null
    22. Student student = (Student) o;
    23. return sex == student.sex && age == student.age && Objects.equals(name, student.name);
    24. }
    25. /**
    26. * 自己重写equals方法,自己定制相等规则,
    27. * 两个对象的内容一样就认为是相等的
    28. * s1.equals(s2)
    29. * 比较者:s1 == this
    30. * 被比较者: s2 ==》 o
    31. * Object是祖宗类,可以传任何类型的对象
    32. * 可以理解为所有的类都默认被Object继承,所以定义方法传参参数类型是
    33. * Object o 代表可以接收所有的对象
    34. */
    35. // @Override
    36. // // 这里传入的参数,就是要比较的对象,然后进行强转
    37. // public boolean equals(Object o){ // Object是祖宗类,可以传任何类型的对象
    38. // // 判断o是不是学生类型
    39. // if (o instanceof Student){
    40. // // 上面判断出是学生类型则将o(传入的对象)强转为学生类
    41. // // 由于要比较的对象o没有name成员,所以进行强转,可以调用name成员
    42. // Student s2 = (Student) o;
    43. // // 2.判断2个对象的内容是否一样
    44. // // 这里的this代表s1,因为是s1这个对象调用的equals方法
    45. // if (this.name.equals(s2.name) && this.age == s2.age
    46. // && this.sex == s2.sex){
    47. // // name 成员这里是字符串引用类型,所以比较内容用equals,age是基础类型
    48. // // 所以用 ==
    49. // return true;
    50. // }else {
    51. // return false; // 如果该对象成员不一样则返回false
    52. // }
    53. // }else {
    54. // // 学生只能和学生比,否则返回一个false
    55. // return false;
    56. // }
    57. // }
    58. // 这里用快捷键的方法操作:
    59. @Override
    60. public String toString() {
    61. return "Student{" +
    62. "name='" + name + '\'' +
    63. ", sex=" + sex +
    64. ", age=" + age +
    65. '}';
    66. }
    67. public String getName() {
    68. return name;
    69. }
    70. public void setName(String name) {
    71. this.name = name;
    72. }
    73. public char getSex() {
    74. return sex;
    75. }
    76. public void setSex(char sex) {
    77. this.sex = sex;
    78. }
    79. public int getAge() {
    80. return age;
    81. }
    82. public void setAge(int age) {
    83. this.age = age;
    84. }
    85. }