• 【Java】Object && equals


     Object 类 equals()

    1. Object 中的 equals() 是直接判断 this obj 本身的值是否相等
    2. 可以重写父类中的 equals()  比较两个对象成员属性值是否相等

    示例代码:

    Student.java

    1. package com.api.Demo05;
    2. public class Student {
    3. private String name;
    4. private int age;
    5. public Student() {
    6. super();
    7. }
    8. public Student(String name, int age) {
    9. this.name = name;
    10. this.age = age;
    11. }
    12. public String getName() {
    13. return name;
    14. }
    15. public void setName(String name) {
    16. this.name = name;
    17. }
    18. public int getAge() {
    19. return age;
    20. }
    21. public void setAge(int age) {
    22. this.age = age;
    23. }
    24. }

    Test01.java

    1. package com.api.Demo05;
    2. public class Test01 {
    3. public static void main(String[] args) {
    4. Student s1 = new Student("mayikt", 22);
    5. Student s2 = new Student("mayikt", 22);
    6. // s1==s2 双等于 比较的是两个对象的 内存地址是否相同
    7. System.out.println(s1==s2); //false
    8. System.out.println(s1.equals(s2)); //false,在没有重写Object父类中的equals()返回false
    9. String str1 = "mayikt";
    10. String str2 = "mayikt";
    11. System.out.println(str1==str2); //true
    12. System.out.println(str1.equals(str2)); //true
    13. /**
    14. * equals() 比较两个对象 值是否相同——错误的(∵ 底层是有重写的)
    15. * 自定义的对象 需要重写equals() 才可以实现
    16. *
    17. * String类中,equals() 比较两个字符串值是否相同
    18. *
    19. * Object 父类中 equals 比较 两个对象的内存地址是否相同
    20. * public boolean equals(Object anObject) {
    21. * if (this == anObject) {
    22. * return true;
    23. * }
    24. */
    25. /**
    26. * equals() 比较两个对象值是否相同
    27. * == 比较两个对象的内存地址是否相同
    28. * 条件:如果自定义的对象没有重写object父类的话,则是在比较两个对象的 内存地址是否相同
    29. */
    30. }
    31. }

    重写Object父类中的equals()

    Student.java 中重写 equals()

    1. /**
    2. * 重写父类中的equals() 实现比较两个对象的成员属性值是否相同
    3. */
    4. @Override
    5. public boolean equals(Object obj) {
    6. // this 代表 s1, obj 代表 s2
    7. if (this == obj) {
    8. return true;
    9. }
    10. // 比较 两个对象的类型是否一致
    11. // this.getClass() != obj.getClass() 两个对象的类型 如果不一致
    12. if (obj == null || this.getClass() != obj.getClass()) {
    13. return false;//不会在比较两个对象的 成员属性值
    14. }
    15. // 两个对象的类型 是一致的 需要比较两个对象属性值
    16. // 多态强转类型
    17. // String 类型中 equals()比较 两个字符串值相等 String 底层重写 object 父类
    18. Student s2 = (Student) obj;
    19. return this.age == s2.age && this.name.equals(s2.name);
    20. }

    Test02.java

    1. package com.api.Demo05;
    2. import com.object.Demo31.Mayikt;
    3. public class Test02 {
    4. public static void main(String[] args) {
    5. Student s1 = new Student("mayikt", 22);
    6. Student s2 = new Student("mayikt", 22);
    7. // s1==s2 双等于 比较的是两个对象的 内存地址是否相同
    8. System.out.println(s1==s2); //false
    9. System.out.println(s1.equals(s2)); //true,在没有重写Object父类中的equals(),是比较两个对象的内存地址,返回false
    10. System.out.println(s1.equals(null)); //false
    11. System.out.println(s1.equals(new Mayikt())); //false
    12. Mayikt mayikt = new Mayikt();
    13. System.out.println(s1.getClass()); //class com.api.Demo05.Student
    14. System.out.println(s2.getClass()); //class com.api.Demo05.Student
    15. System.out.println(mayikt.getClass());//class com.object.Demo31.Mayikt
    16. }
    17. }

    下一篇文章:instanceof 关键字

  • 相关阅读:
    SpringBoot SpringBoot 原理篇 1 自动配置 1.1 bean 的加载方式【一】
    智能网联汽车 自动驾驶地图数据质量规范
    Spring MVC中@ModelAttribute注解起什么作用呢?
    Win10 cmd如何试用tar命令压缩和解压文件夹
    ES: export 的用法
    生意不好如何逆风翻盘 | 多门店经营必读技巧(1):导购管理 连锁店管理的技巧 连锁店生意经 如何做导购管理
    一个支持WinForms换肤的开源组件
    数据分析与Excel
    GRDB和FMDB学习篇(各处摘抄)
    解锁编程潜能:探索亚马逊CodeWhisperer,打造编程世界的声音引导者
  • 原文地址:https://blog.csdn.net/qq_57268251/article/details/133791216