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

相关推荐
未秃头的程序猿几秒前
一次秒杀把服务打挂了,我用Sentinel规则配置化救了回来
java·后端·spring cloud
Zane19943 分钟前
明明没删字段,反序列化却报错:都是隐式 serialVersionUID 惹的祸
java·后端
0xBADCODE6 分钟前
动态DEX加载+反射+DES硬编码密钥:安卓三层逆向实战
android·java·python·安全·网络安全·逆向·ctf
被摘下的星星10 分钟前
Java 中 .length、.length() 以及 .size() 的区分
java·开发语言
代码不停15 分钟前
子数组问题
java·算法
geovindu22 分钟前
CSharp: State Pattern
开发语言·后端·c#·.net·状态模式·行为模式
山岚的运维笔记25 分钟前
mysql 专业笔记 -- 第 1 章:MySQL 入门
运维·数据库·笔记·后端·学习·mysql·dba
IT小白杨27 分钟前
TikTok小店防封号浏览器实战:2026年多店铺环境隔离与账号安全运营技术解析
开发语言·数据库·安全·php·chrome devtools·指纹浏览器
信誓旦旦的程序猿30 分钟前
【零依赖量化数据实战 #25】北交所技术指标与基本面
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
2601_9669496532 分钟前
Python 量化开发为什么适合使用金融数据 SDK?从数据获取到策略研究的工程化实践
开发语言·python·数据分析·量化交易·股票数据·quantdash