Loading

Java Object类

概述

Java中 Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。

如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类。

public class MyClass /*extends Object*/ {
    ...
}

Object类中有很多方法,这里我们主要介绍2个:

  • toString:返回该对象的字符串表示。

  • equals:判断两个对象是否"相等"。

toString方法

Object 类中实现的 toString() 方法是返回当前对象的类型和内存地址信息,但在一些子类(如 String、Date 等)中进行了重写,所以我们可以根据需要在自定义类型中重写 toString() 方法。

public class Person {
    private String name;
    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 重写Object类的toString方法,打印对象的属性
     *
     * @return
     */
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

equals方法

Object 类中的 equals() 方法用来检测一个对象是否等价于另外一个对象。equals()方法只能比较引用类型,判断内存地址是否相等。

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

通常情况下,我们自定义的类如果要使用equals()方法的话,也是比较两个对象的实体内容是否相同,所以就需要对Object类中的equals()方法进行重写。

import java.util.Objects;

public class Person {
    private String name;
    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @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);
    }
}

==和equals的区别

==:

  • 可以使用在基本数据类型和引用数据类型。
  • 如果比较的是基本数据类型,比较的是值是否相等,如果是引用数据类型,比较的是对象的地址是否相等。

equals方法:

  • 只能适用于引用数据类型。
  • Object类中定义的equals()方法和==的作用是相同的。
  • 像String、Date、File、包装类等都重写了Object类中的 equals() 方法,重写以后,比较的不再是两个引用的地址值是否相等。
posted @ 2021-10-15 17:25  charlatte  阅读(46)  评论(0编辑  收藏  举报