Java常用API---Object类

Object类概述

概述

Object类是所有类的父类,任何一个类的对象(包括数组),都可以调用Object类的方法

目标:

掌握Object类的常用方法

java 复制代码
常用方法:
boolean equals(Object obj):判断当前对象是否与参数对象"相等"
String toString():返回该对象的字符串表示形式
int hashCode():返回对象在堆内存的十进制地址值

需求:创建两个Student对象,利用Object提供的equals方法比较两个对象是否"相等"

java 复制代码
//学生类
public class Student {
    private String name;
    private int age;

    public Student() {
        System.out.println("空参构造");
    }

    public Student(String name, int age) {
        System.out.println("有参构造");
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
java 复制代码
Student stu1 = new Student("张三", 23);
Student stu2 = new Student("张三", 23);
//Student虽然没有声明父类,但是它的父类就是Object,可以使用equals方法
boolean result = stu1.equals(stu2);

通过底层代码分析,Object的equals方法衡量两个对象是否相等的条件,是比较对象地址值!
System.out.println(result);       
java 复制代码
//打印stu1对象
System.out.println(stu1);

//需求:尝试打印stu1不看到对象地址值,看到对象属性值!
 //打印语句的底层,获取的打印内容是通过调用对象的toString方法得到的,此时Student自己没有,是调用的Object的toString方法
//场景:当父类方法不满足子类需求,重写父类Object的toString方法

比较stu1和stu2对象是否相等,但是衡量的条件得根据属性值 来比较!

场景:当父类方法不能满足子类要求时,子类可以重写父类的方法

思路:让Student类重写Object父类的equals方法,在重写方法中根据对象属性值比较即可

java 复制代码
@Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

小结

  1. Object的equals方法的作用是什么?

    默认是比较两个对象的地址值,和"=="没区别

    如果子类重写equals,则比较对象的属性值

  2. Object的toString方法的作用是什么?

    默认是返回对象的地址字符串

    一般需要子类重写,去返回对象的属性值

  3. 字符串Object的hashCode方法的作用是什么?

    返回对象的十进制地址值

相关推荐
咖啡Beans44 分钟前
使用OpenFeign实现微服务间通信
java·spring cloud
我不是混子1 小时前
说说单例模式
java
间彧3 小时前
SimpleDateFormat既然不推荐使用,为什么java 8+中不删除此类
java
数据智能老司机3 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
间彧3 小时前
DateTimeFormatter相比SimpleDateFormat在性能上有何差异?
java
间彧3 小时前
为什么说SimpleDateFormat是经典的线程不安全类
java
MacroZheng3 小时前
横空出世!MyBatis-Plus 同款 ES ORM 框架,用起来够优雅!
java·后端·elasticsearch
数据智能老司机4 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机4 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构