《Object类》

目录

一、Object类

[1.1 定义与地位](#1.1 定义与地位)

[1.2 toString()方法](#1.2 toString()方法)

[1.3 equals()方法](#1.3 equals()方法)

[1.4 hashcode()方法](#1.4 hashcode()方法)


一、Object类

1.1 定义与地位

Object类是Java语言中的根类,所有的类(除了Object类)都直接或间接继承自Object。这就意味着在Java中,任何一个对象都可以被看作是Object类的实例。例如:

java 复制代码
class MyClass{}
public class Demo1 {
    public static void main(String[] args) {
        Object obj = new MyClass();
    }
}

我们也可以使用Object来接受所有类的对象

java 复制代码
class Person{}
class Doctor{}
public class Demo3 {
    public static void func(Object obj){
        System.out.println(obj);
    }
    public static void main(String[] args) {
        func(new Person());
        func(new Doctor());
    }
}

在帮助文档中我们可以查到Object类中的方法。如下:

我们先来熟悉一下toString()方法、equals()方法和hashcode()方法。

1.2 toString()方法

作用:该方法返回一个字符串,用于描述对象的信息。默认情况下,它返回对象的类名和哈希码(十六进制表示)。例如:

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

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test1 {
    public static void main(String[] args) {
        Person person = new Person("zhangsan",12);
        System.out.println(person);
    }
}

我们也可以对toString方法进行重写,通常需要在自定义类中,以便返回更有意义的对象信息。

例如:

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

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class Test1 {
    public static void main(String[] args) {
        Person person = new Person("zhangsan",12);
        System.out.println(person);
    }
}

1.3 equals()方法

在Java中,用==进行比较时:

1.如果==左右两侧是基本类型变量,比较的是变量中值是否相同。

2.如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同(是否引用同一个对象)。

3.如果要比较对象中内容,必须重写Object中的equals方法,因为equals方法默认也是按照地址比较的:

没重写时

java 复制代码
class Point{
    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
public class Test2 {
    public static void main(String[] args) {
        Point point1 = new Point(1,2);
        Point point2 = new Point(1,2);
        System.out.println(point1.equals(point2));
    }
}

重写后:

java 复制代码
class Point{
    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x && y == point.y;
    }
}
public class Test2 {
    public static void main(String[] args) {
        Point point1 = new Point(1,2);
        Point point2 = new Point(1,2);
        System.out.println(point1.equals(point2));
    }
}

结论:比较对象的内容是否相同时,一定要重写equals()方法。

1.4 hashcode()方法

作用:返回对象的哈希码值。哈希码主要用于在哈希表(如 Java 中的 HashMap 等集合类)中确定对象的存储位置。一般来说,两个相等的对象(根据 equals 方法判断)应该具有相同的哈希码。

我们认为两个名字相同,年龄相同的对象,将存储在同一个位置,如果不重写hashcode()方法,我们可以来看示例

代码:

java 复制代码
class Student{
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class Test3 {
    public static void main(String[] args) {
        Student student1 = new Student("zhangsan",15);
        Student student2 = new Student("zhangsan",15);
        System.out.println(student1.hashCode());
        System.out.println(student2.hashCode());
    }
}

两个对象的hash值不同。

当我们重写hashcode方法之后:

java 复制代码
import java.util.Objects;

class Student{
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
public class Test3 {
    public static void main(String[] args) {
        Student student1 = new Student("zhangsan",15);
        Student student2 = new Student("zhangsan",15);
        System.out.println(student1.hashCode());
        System.out.println(student2.hashCode());
    }
}

结论

1、hashcode方法用来确定对象在内存中存储的位置是否相同。

2、事实上hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的 散列码,进而确定该对象在散列表中的位置。

相关推荐
winfreedoms2 分钟前
java-网络编程——黑马程序员学习笔记
java·网络·学习
开开心心就好13 分钟前
键盘改键工具免安装,自定义键位屏蔽误触
java·网络·windows·随机森林·计算机外设·电脑·excel
IManiy13 分钟前
总结之Temporal全局速率控制(二)第三方速率控制服务设计
java
雨季66614 分钟前
Flutter 三端应用实战:OpenHarmony “极简手势轨迹球”——指尖与屏幕的诗意对话
开发语言·javascript·flutter
m0_7369191018 分钟前
编译器命令选项优化
开发语言·c++·算法
Stream_Silver20 分钟前
【Agent学习笔记1:Python调用Function Calling,阿里云API函数调用与DeepSeek API对比分析】
开发语言·python·阿里云
froginwe1120 分钟前
CSS3 多媒体查询实例
开发语言
OpenMiniServer21 分钟前
电气化能源革命下的社会
java·人工智能·能源
naruto_lnq25 分钟前
C++中的工厂方法模式
开发语言·c++·算法
独自破碎E25 分钟前
LCR_019_验证回文串II
java·开发语言