• 【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 关键字

  • 相关阅读:
    Python 知识:检查图中是否存在哈密顿循环
    STM32 OLED屏幕显示详解
    汽车控制器软件正向开发
    Redis 性能问题&优化方案
    Synchronized锁1
    Modbus入门
    剖析WPF模板机制的内部实现
    论文阅读 Dynamic Graph Representation Learning Via Self-Attention Networks
    路由跳转时的页面状态保存
    vue项目中element-ui对话框el-dialog嵌套显示时多了一个遮罩层解决办法
  • 原文地址:https://blog.csdn.net/qq_57268251/article/details/133791216