• java——API—— Object类——重写equals方法


    重写Object类的equals方法

    如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。


    Object类的equals方法,默认比较的是两个对象的地址值,没有意义
    所以我们要重写equals方法,比较两个对象的属性(name,age)

    • 问题:
      隐含着一个多态
      多态的弊端:无法使用子类特有的内容(属性和方法)
      Object obj = p2 = new Person("古力娜扎",19);
      解决:可以使用向下转型(强转)把obj类型转换为Person

    import java.util.Objects;
    
    public class Person {	
    	private String name;
    	private int age;
    	
        @Override
        public boolean equals(Object o) {
            // 如果对象地址一样,则认为相同
            if (this == o)
                return true;
            // 如果参数为空,或者类型信息不一样,则认为不同
            if (o == null || getClass() != o.getClass())
                return false;
            // 转换为当前类型
            Person person = (Person) o;
            // 要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果
            return age == person.age && Objects.equals(name, person.name);
        }
    }

    Object类的equals方法

    在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:

    public static boolean equals(Object a, Object b)
    判断两个对象是否相等。
    
    

    object类中equals方法的源码:

    public static boolean equals(Object a, Object b) {  
        return (a == b) || (a != null && a.equals(b));  
    }
    
    

    package com.itheima.demo01.Object;
    
    import java.util.Objects;
    
    public class Demo03Objects {
        public static void main(String[] args) {
            String s1 = "abc";
            //String s1 = null;
            String s2 = "abc";
            //boolean b = s1.equals(s2); // NullPointerException null是不能调用方法的,会抛出空指针异常
            //System.out.println(b);
            /*
                Objects类的equals方法:对两个对象进行比较,防止空指针异常
                public static boolean equals(Object a, Object b) {
                    return (a == b) || (a != null && a.equals(b));
                }
             */
            boolean b2 = Objects.equals(s1, s2);
            System.out.println(b2);
    
        }
    }
    
     
  • 相关阅读:
    64位平台支持大于2 GB大小的数组
    NET Framework 4.5新特性 数据库的连接加密保护。
    永无止境之网站的伸缩性架构
    ASP.NET MVC IOC 之Ninject攻略
    C# 中几个小“陷阱”
    AngularJS的依赖注入方式
    JVM内存配置详解(转)
    StringBuilder、StringBuffer和String三者的联系和区别(转)
    Java线程的生命周期(转)
    Java程序员须知的七个日志管理工具(转)
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/16897942.html
Copyright © 2020-2023  润新知