我是靠谱客的博主 精明纸鹤,最近开发中收集的这篇文章主要介绍36、Object类,及其常用的方法的覆盖重写(toString,equals),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

      • Object类
        • toString()方法
        • equals()方法
        • Objects类中的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是不能调用方法的,会抛出空指针异常

最后

以上就是精明纸鹤为你收集整理的36、Object类,及其常用的方法的覆盖重写(toString,equals)的全部内容,希望文章能够帮你解决36、Object类,及其常用的方法的覆盖重写(toString,equals)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部