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

相关推荐
暴力求解8 分钟前
C++类和对象(上)
开发语言·c++·算法
让我们一起加油好吗21 分钟前
【基础算法】枚举(普通枚举、二进制枚举)
开发语言·c++·算法·二进制·枚举·位运算
大锦终22 分钟前
【C++】特殊类设计
开发语言·c++
异常君25 分钟前
MyBatis 中 SqlSessionFactory 和 SqlSession 的线程安全性深度分析
java·面试·mybatis
crud32 分钟前
Spring Boot 使用 spring-boot-starter-validation 实现优雅的参数校验,一文讲透!
java·spring boot
Dcs35 分钟前
常见 GC 垃圾收集器对比分析
java
程序员岳焱38 分钟前
Java高级反射实战:15个场景化编程技巧与底层原理解析
java·后端·编程语言
程序员小假38 分钟前
说一说 Netty 中的心跳机制
java·后端
真实的菜1 小时前
消息队列处理模式:流式与批处理的艺术
java
Bruce_Liuxiaowei1 小时前
PHP文件包含漏洞详解:原理、利用与防御
开发语言·网络安全·php·文件包含