• Java的Object类


    一、Object类

    Object类是所有类的父类,所以所有的的类都拥有Object类中的方法。
    所有对象都可以调用Object类中的方法。

    二、equals

    1. equals和==

    • ==是比较运算符,既可以判断基本类型,也可以判断引用类型;如果判断的是基本类型,则判断值是否相等,如果判断引用类型,则判断地址是否相同。
    • equals只能判断引用类型,默认判断地址,但在系统自带的子类中会被重写,判断具体内容是否相同。

    2. 源码

    //Object类中
    public boolean equals(Object obj) {
        return (this == obj);
    }
    
    //字符串类中
    public boolean equals(Object anObject) {
    		// 如果是和自身比较直接返回true
            if (this == anObject) {
                return true;
            }
            // 如果类型一致就继续向下判断
            if (anObject instanceof String) {
               //向下转型
                String anotherString = (String)anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                	//逐个比较字符
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                            return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3. 重写equals

    class Person {
        String name;
        int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public boolean equals(Object myobject) {
            if(this == myobject){
                return true;
            }
    
            if(myobject instanceof Person){
                //向下转型得到myObject的属性
                Person p = (Person)myobject;
                return this.name == p.name && this.age == p.age;
            } else {
                return false;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    三、hashCode

    1. 可以提高哈希结构容器的效率。(到集合的时候具体说)
    2. 哈希值是根据地址来定义的,但不完全相同,可以当作地址来用,但不是地址。
    3. 如果两个对象指向同一地址,则hashcode相同,如果指向不同地址,则hashcode不同。
    4. hashcode()有需要也会重写

    四、toString

    1. 说明

    • 返回对象的字符串表示,返回全类名 + @ + hashcode的十六进制表示
    • 一般toString方法会被重写,用于展示对象的信息。
    • tostring方法默认会被调用

    2. 源码

    //toHexString可以将hashcode转换为16进制
        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    
    • 1
    • 2
    • 3
    • 4

    五、finalize

    这个函数几乎不会使用。
    当一个对象没有任何引用时会被jvm当作垃圾回收。
    在对象被回收前会调用该方法,类似vue的生命周期函数。
    可以重写该函数,使得对象被销毁时触发某些事件。

    垃圾回收器有自己的算法,由系统自动出发
    也可以通过System.gc()方法手动回收

  • 相关阅读:
    15.线程同步的几种方法
    如何通过SQL批量删除重复数据
    创建钉钉审批流实例
    grid网格布局,比flex方便太多了,介绍几种常用的grid布局属性
    2022年9月5号 SpringBoot自动配置原理初步了解。
    获取深度学习模型权重或者某一层特征图输出的方法:基于pytorch
    CentOS Stream 9-使用 systemd 管理自己程序时自定义日志路径
    SQL Server如何获取GUID号
    亚马逊自养号进行买家测评需要注意什么?
    3、Linux-命令提示符与常用命令(一)
  • 原文地址:https://blog.csdn.net/m0_66711291/article/details/125537962