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()方法等。

相关推荐
非ban必选3 分钟前
spring-ai-alibaba第五章阿里dashscope集成mcp远程天气查询tools
java·后端·spring
UpUpUp……6 分钟前
特殊类的设计/单例模式
开发语言·c++·笔记·单例模式
苏克贝塔14 分钟前
CMake学习--Window下VSCode 中 CMake C++ 代码调试操作方法
c++·vscode·学习
嘤国大力士22 分钟前
C++11&QT复习 (十一)
开发语言·c++·qt
遥不可及~~斌26 分钟前
@ComponentScan注解详解:Spring组件扫描的核心机制
java
高林雨露26 分钟前
Java 与 Kotlin 对比示例学习(三)
java·kotlin
wkm95627 分钟前
qt.qpa.xcb: could not connect to display解决方法
开发语言·qt·ubuntu
lc99910232 分钟前
基于kotlin native的C与kotlin互相调用
开发语言·kotlin
极客先躯1 小时前
高级java每日一道面试题-2025年3月22日-微服务篇[Nacos篇]-Nacos的主要功能有哪些?
java·开发语言·微服务
odoo中国1 小时前
深度学习 Deep Learning 第15章 表示学习
人工智能·深度学习·学习·表示学习