36、Object类,及其常用的方法的覆盖重写(toString,equals)

本文探讨了Java中Object类的toString和equals方法的默认行为以及如何在ArrayList和Scanner等类中重写这些方法。重点讲解了多态下equals方法的转型问题,并介绍了Objects类中更健壮的equals方法。
摘要由CSDN通过智能技术生成

Object类,及其常用的方法的覆盖重写(toString,equals)

Object类

类Object是类层次结构的根(最顶层)类。每个类都使用了Object类作为父类。所有对象(包括数组)都实现这个类的方法。

toString()方法
  1. 作用:打印对象的信息
  2. 重写前:打印的是包名类名@地址值
  3. 重写后:打印的是对象中的属性值
@Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

类ArrayList、类Scanner中覆盖重写了toString方法,所以,它调用toString时,才能直接打印出字符串。

类Random没有覆盖重写toString方法,所以它调用toString时,打印的是地址值。

equals()方法
  1. 作用:比较两个对象

  2. 重写前:比较的是对象的地址值

  3. 重写后:比较的是对象中的属性值

    ==:比较运算符

    基本数据类型:比较的是值。

    引用数据类型(类):比较的是两个对象的地址值。

但由于equals()方法中传递的参数是Object型的,相当于向上转型了,就存在这样的一个问题:多态中,多态定义的父类对象无法使用子类特有的属性/方法。所以需要对Object进行向下转型。

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
//getClass() != o.getClass()使用反射技术,判断o是否为子类型 等效于 instanceof
Objects类中的equals()方法

Objects的方法不会抛出空指针异常,加了一些健壮性的判断。

boolean flag=Objects.equals(s1,s2);//不会异常
String s1=null;
String s2="abc";
boolean b=s1.equals(s2);//NullPointerException null是不能调用方法的,会抛出空指针异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值