Bootstrap

【Java】Java 常用核心类篇 —— Object 类

Object 终极父类

toString() 方法

在 Java 中,toString() 方法是 Object 类中定义的一个实例方法,所有的 Java 类都继承自 Object 类,因此所有的类都拥有 toString() 方法。这个方法的主要作用是返回一个对象的字符串表示形式,通常用于调试和日志记录等场景,方便开发者查看对象的信息。

Object 类中的 toString() 方法

Object 类中 toString() 方法的默认实现如下:

public String toString() {
   
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

它返回的字符串包含了对象的类名和该对象哈希码的十六进制表示,例如

com.example.MyClass@1b6d3586

这种默认的字符串表示形式通常对开发者来说不太友好,因为它没有提供对象内部状态的详细信息。

重写 toString() 方法

为了让 toString() 方法返回更有意义的信息,我们通常会在自定义类中重写这个方法。以下是一个示例:

// 定义一个 Person 类
class Person {
   
    private String name;
    private int age;

    // 构造方法
    public Person(String name, int age) {
   
        this.name = name;
        this.age = age;
    }

    // 重写 toString() 方法
    @Override
    public String toString() {
   
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        // 创建 Person 对象
        Person person = new Person("Alice", 25);
        // 调用 toString() 方法
        System.out.println(person.toString()); 
        // 由于 println 方法会自动调用对象的 toString() 方法,所以也可以直接打印对象
        System.out.println(person); 
    }
}
  • 定义 Person 类:包含两个私有属性 name 和 age,以及一个构造方法用于初始化这两个属性。
  • 重写 toString() 方法:在 Person 类中重写 toString() 方法,返回一个包含 name 和 age 属性值的字符串。
  • 创建对象并调用 toString() 方法:在 main 方法中创建一个 Person 对象,并调用 toString() 方法打印对象的信息。由于 System.out.println() 方法会自动调用对象的 toString() 方法,所以也可以直接将对象作为参数传递给 println() 方法。

使用场景:

  • 调试:在调试代码时,通过打印对象的 toString() 方法返回的字符串,可以快速查看对象的状态。
  • 日志记录:在记录日志时,将对象的信息以字符串形式记录下来,方便后续分析。
  • 显示信息:在用户界面或控制台中显示对象的信息时,使用 toString() 方法可以方便地将对象转换为可读的字符串。

注意事项

  • 重写 toString() 方法时,建议使用 @Override 注解,这样可以让编译器检查是否真的重写了父类的方法,避免拼写错误。
  • 重写的 toString() 方法应该返回一个包含对象重要信息的字符串,并且尽量简洁明了。

equals() 方法

在 Java 中,equals() 方法用于比较两个对象是否相等。下面将从 Object 类的默认实现、重写 equals() 方法的必要性、重写规则以及示例等方面进行详细介绍。

Object 类中的 equals() 方法

Object 类是所有 Java 类的基类,它定义了 equals() 方法的默认实现:

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

在 Object 类中,equals() 方法使用 == 运算符来比较两个对象。== 运算符比较的是两个对象的引用是否相等,即它们是否指向内存中的同一个对象。因此,默认情况下,equals() 方法判断的是两个对象是否为同一个实例,而不是它们的内容是否相等。

重写 equals() 方法

重写 equals() 方法的必要性

在实际开发中,我们经常需要比较两个对象的内容是否相等,而不是它们是否为同一个实例。例如,比较两个 Person 对象的姓名和年龄是否相同。此时,就需要重写 equals() 方法,以实现基于对象内容的比较。

重写 equals() 方法的规则

当重写 equals() 方法时,需要遵循以下几个规则:

  1. 自反性:对于任何非空引用值 x,x.equals(x) 应该返回 true。
  2. 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应该返回 true。
  3. 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 也应该返回 true。
  4. 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 应该始终返回相同的结果,前提是在比较过程中没有修改对象的内容。
  5. 非空性:对于任何非空引用值 x,x.equals(null) 应该返回 false。
重写 equals() 方法的示例

以下是一个重写 equals() 方法的示例:

class Person {
   
    private String name;
    private int age;

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

    // 重写 equals() 方法
    @Override
    public boolean equals(Object obj) {
   
        // 检查是否为同一个引用
        if (this == obj) {
   
            return true;
        }
        // 检查对象是否为 null
        if (obj == null) {
   
            return false;
        }
        // 检查对象是否为同一类型
        if (getClass() != obj.getClass()) {
   
            return false;
        }
        // 将对象转换为 Person 类型
        Person other = (Person) obj;
        // 比较对象的属性
        return age == other.age && (name == null ? other.name == null : name.equals(other.name));
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Alice&#
;