【Java SE】Object类

  • Object是Java 默认提供的一个类。Java里除了Object类,所有的类都是存在继承关系的。默认继承Object类。
  • Java 中的 Object 类是类层次结构的根类,所有类都直接或间接继承自 Object 类。它提供了一些基本方法,这些方法可以被所有 Java 对象使用。
  • 即所以有的类的对象都可以使用Object的引用进行接收

目录

Object类的主要方法

[1. toString()](#1. toString())

[2. equals()](#2. equals())

重写后完整代码:

原理如下:

输出:

[3. clone()](#3. clone())

[4. hashCode()](#4. hashCode())

※※※※※

重写后完整代码:

[5. getClass()](#5. getClass())

[6. finalize()](#6. finalize())

注意事项


Object类的主要方法

1. toString()

作用:打印对象的内容

返回对象的字符串表示。默认实现返回类名和对象的哈希码,但通常会被重写以提供更有意义的信息。

java 复制代码
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

2. equals()

作用:对比对象

在Java中, == 进行比较时;

  • 如果 == 左右两侧是基本类型变量 ,比较的是变量中的值是否相同
  • 如果 == 左右两侧是引用类型变量 ,比较的是引用变量地址是否相同
  • 如果要比较对象中的内容,必须重写Object中的equals方法,因为equals()方法默认也是按照地址比较的

重写后完整代码:

java 复制代码
public class Person implements Cloneable{
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

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

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public boolean equals(Object obj) {
        Person person = (Person) obj;
        return this.name.equals(person.name)&&this.age == person.age;
    }
}
java 复制代码
public class Test {
    public static void main(String[] args)
            throws CloneNotSupportedException{
        Person person1 = new Person("wugang",55);
        Person person2 = new Person("wujun",66);
        Person person3 = (Person) person1.clone();
        System.out.println(person1.equals(person3));//克隆的
        System.out.println(person1.equals(person2));
    }
}

原理如下:

①创建类和输入字段,实例两个对象person1和person2,并且调用带参数的构造方法

②使用克隆方法,克隆出一个新的person1 作为 person3

具体方式见此文:

【Java SE】Clonable接口和深拷贝-CSDN博客文章浏览阅读414次,点赞17次,收藏6次。Java中的浅拷贝与深拷贝实现对比 摘要:本文介绍了Java中实现对象拷贝的两种方式。浅拷贝通过实现Cloneable接口和重写clone()方法实现,仅复制对象本身及基本类型字段,引用类型字段共享内存。深拷贝则需递归处理引用类型字段,通过调用字段对象的clone()方法实现完全独立复制。文章对比了两者的特性:浅拷贝内存占用低但修改会影响原对象,深拷贝完全独立但实现更复杂。建议根据场景选择:对象无引用字段或字段不可变时用浅拷贝,需要完全独立副本时用深拷贝。https://blog.csdn.net/Boop_wu/article/details/149532970

③重写equals()方法

输出:


3. clone()

创建并返回对象的一个副本。需要实现 Cloneable 接口才能使用。

详情见此文:

【Java SE】Clonable接口和深拷贝-CSDN博客文章浏览阅读414次,点赞17次,收藏6次。Java中的浅拷贝与深拷贝实现对比 摘要:本文介绍了Java中实现对象拷贝的两种方式。浅拷贝通过实现Cloneable接口和重写clone()方法实现,仅复制对象本身及基本类型字段,引用类型字段共享内存。深拷贝则需递归处理引用类型字段,通过调用字段对象的clone()方法实现完全独立复制。文章对比了两者的特性:浅拷贝内存占用低但修改会影响原对象,深拷贝完全独立但实现更复杂。建议根据场景选择:对象无引用字段或字段不可变时用浅拷贝,需要完全独立副本时用深拷贝。https://blog.csdn.net/Boop_wu/article/details/149532970


4. hashCode()

返回对象的哈希码值。如果两个对象通过 equals 方法相等,那么它们的哈希码必须相同。

java 复制代码
public native int hashCode();

※※※※※

Java 7 及以上版本可以使用 java.util.Objects 的静态方法 hash,自动处理多字段的哈希组合:

java 复制代码
@Override
public int hashCode() {
    return Objects.hash(field1, field2, field3);
}

重写后完整代码:

java 复制代码
public class Test {
    public static void main(String[] args)
            throws CloneNotSupportedException{
        D1.Person person1 = new D1.Person("wugang",55);
        D1.Person person2 = new D1.Person("wujun",66);
        D1.Person person3 = (Person) person1.clone();
        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
        System.out.println(person3.hashCode());
    }
}
java 复制代码
import java.util.Objects;

public class Person implements Cloneable {
    public String name;
    public int age;

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

    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

5. getClass()

返回对象的运行时类

java 复制代码
public final native Class<?> getClass();

6. finalize()

在垃圾回收器回收对象之前调用,通常用于资源清理。不建议重写此方法

java 复制代码
protected void finalize() throws Throwable { }

注意事项

  • Object 类的方法在大多数情况下需要根据具体需求进行重写。
  • finalize 方法已被标记为过时,不建议使用。
  • 使用 clone 方法时要注意浅拷贝和深拷贝的区别。

Java 中的 Object 类是类层次结构的根类,所有类都直接或间接继承自 Object 类。它提供了一些基本方法,这些方法可以被所有 Java 对象使用。

相关推荐
是乐谷4 分钟前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算
一只鲲8 分钟前
40 C++ STL模板库9-容器2-vector
开发语言·c++
励志不掉头发的内向程序员19 分钟前
C++基础——内存管理
开发语言·c++
Java水解22 分钟前
Java中的四种引用类型详解:强引用、软引用、弱引用和虚引用
java·后端
lifallen30 分钟前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
一叶飘零_sweeeet38 分钟前
IDEA 插件 Trae AI 全攻略
java·人工智能·intellij-idea
千里镜宵烛1 小时前
深入理解 Linux 线程:从概念到虚拟地址空间的全面解析
开发语言·c++·操作系统·线程
欧哈东哥1 小时前
【C++】标准库中用于组合多个值的数据结构pair、tuple、array...
java·数据结构·c++
python_1361 小时前
web请求和响应
java·spring·github
Eternity_GQM1 小时前
【Word VBA Zotero 引用宏错误分析与改正指南】【解决[21–23]参考文献格式插入超链接问题】
开发语言·c#·word