【JAVASE】Object类详解优化(4)

本文深入解析Java中的Object类,作为所有类的基类,Object的重要性不言而喻。文章详细介绍了toString()和equals()方法的原理及重写技巧,同时探讨了Objects类的equals()方法如何避免空指针异常。

引言

全民炒股的时代好像来临了 。
------------高S
明天期末考,今天学的就不多。

Object类

简介
Object类是Java中所有类的父类,可以理解为人类的亚当夏娃。又称为根类。故Object中的toString(),equals()等方法所有类都可以使用。今天重点介绍这两种方法。

toString()方法

API中的介绍
toString()返回的是这个对象的字符串形式;一般是该对象的地址。但由于这样没什么实际意义,故一般都重写。
重写方法可以自己输入,也可以自动构建
在这里插入图片描述
单击Generate,选择toString(),编译器就会自动重写了

        @Override
    public String toString() {
    //一般都是这种格式
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", habbit='" + habbit + '\'' +
                '}';
    }

这是重写之前的输出字符串
在这里插入图片描述
这是重写之后的;明显看到重写后这个方法的效果更好。
在这里插入图片描述
所以可以根据返回值来判断toString在这个对象中是否被重写。例如String类使用toString()方法返回的是字符串值,说明String类的toString()已经被重写。

equals()方法

equals()方法的源码是这样的;对象为基础类型时比较值,是引用类型时比较地址

public boolean equals(Object obj) {
                      return (this == obj);
                      
               }

无论什么时候重写,都要记得重写hashcode()方法,【这个要到后面集合再学】,现在只看equals()的重写。与toString()一样,也可以自动生成。

   @Override
   public boolean equals(Object o){
        //优化性能
        if(o==this)return true;
        //该类不为person的父类,此时用多态转型会报错.
         if(o instanceof Person==false||o==null)return false;
         //if(getClass()!=o.getClass()) 与 instanceof 的效果一样的;
         
        //Object类->person (多态问题)
        Person p=(Person)o;
        return id==p.id&&age==p.age
                &&
                //String类不能用'=='比较
                Objects.equals(name,p.name)&&Objects.equals(habbit,p.habbit);
   }
   //下面是自动生成的,暂时没了解作用,好像是哈希表啥的~~~
    @Override
    public int hashCode() {
        return Objects.hash(id, name, age, habbit);
    }

Objects类

上面的重写equals()方法中用到了Objects.equals()方法,因为这个方法可以避免空指针报错
下面是源码;

public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
        //可以看到,如果是空对象,就直接返回false,不会报错l。
    }

总结

诸君,高考加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高冷小伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值