JAVA学习*Object类

Object类

Object类是所有类的父类

类中有一些方法(都需要掌握)

toString()方法

在学习类的对象的时候有介绍过了,当我们重新给此方法就会打印类与对象的信息

equals()方法

在Java中的比较,

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

如果==左右两侧是引用类型变量,比较的是引用变量地址 是否相同。

如果要比较引用类型指向的值相同,需要重写equals()方法。

代码展示:

java 复制代码
import java.util.Objects;
public class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
java 复制代码
public class Test {
    public static void main(String[] args) {
        Student stu1 = new Student("lisi",18);
        Student stu2 = new Student("lisi",18);
        System.out.println(stu1 == stu2);
        System.out.println(stu1.equals(stu2));
        System.out.println("----------");
        String str1 = new String("abc");
        String str2 = new String("abc");
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));
    }
}

输出:

false

flase


false

true

代码解释:

1、对于对象,== 比较的是引用,即是否指向同一内存地址。Student是类stu1和stu2是引用变量,分别引用 Student 类创建的对象。

2、用equals()方法,当没有重写equals()方法时,调用父类Object类的equals()方法,比较的是两个地址是否相同,而非指向的内容是否相同。

3、为了能比较指向的内容是否相同,需要重写equals()方法。

(可以借助编译器生成)

java 复制代码
	@Override
	//进行了比较合理性的判断
    public boolean equals(Object o) {
        if (this == o) return true;//自己比自己
        if (o == null || getClass() != o.getClass()) return false;//为空和类型不相同,返回false
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

此时之前的输出结果发生变化

输出:

false

true


false

true

4、为什么String类的equals()方法比较的是指向的内容?因为String本身已经重写了equals()方法。

hashCode()方法

源码:

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

我们认为两个名字相同,年龄相同的对象,将存储在同⼀个位置。当没有重写hashCode()方法时,他们的hash值不相同。

我们需要重写hashCode()方法。

(可以借助编译器生成)

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

其他关于hashCode()方法知识后续在讲。

其他方法之后学习中介绍

总结

对于我们自定义的类时,我们最好通过编译器重写toString()方法、equals()方法等。

相关推荐
kp000003 分钟前
PHP弱类型安全漏洞解析与防范指南
android·开发语言·安全·web安全·php·漏洞
小Tomkk14 分钟前
2025年PMP 学习十八 第11章 项目风险管理 (11.5~11.7)
学习·项目管理·pmp
卡戎-caryon23 分钟前
【C++】15.并发支持库
java·linux·开发语言·c++·多线程
90后小陈老师29 分钟前
WebXR教学 09 项目7 使用python从0搭建一个简易个人博客
开发语言·python·web
tyatyatya32 分钟前
MATLAB 神经网络的系统案例介绍
开发语言·神经网络·matlab
hweiyu0043 分钟前
C#学习教程(附电子书资料)
开发语言·学习·c#
爱做ppt的阿伟44 分钟前
2025/517学习
学习
q567315231 小时前
图片爬虫通过模板及使用说明
开发语言·爬虫·tcp/ip·golang
superior tigre1 小时前
C++学习:六个月从基础到就业——C++11/14:列表初始化
c++·学习
正在走向自律1 小时前
Conda 完全指南:从环境管理到工具集成
开发语言·python·conda·numpy·fastapi·pip·开发工具