• 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()方法手动回收

  • 相关阅读:
    docker-compose详解
    机器学习tip:sklearn中的pipeline
    leetcode 637. Average of Levels in Binary Tree 二叉树的层平均值(简单)
    刷题笔记(牛客java选择题)
    ORACLE数据库前导0的问题
    【算法面试必刷Java版六】判断链表是否有环
    CAN FD canfd适配器USBCANFD的功能简介
    备战 清华大学 上机编程考试-冲刺前50%,倒数第5天
    Linux下部署worldPress
    【Qt炫酷动画】demo02-仿苹果对话框淡入淡出的动画
  • 原文地址:https://blog.csdn.net/m0_66711291/article/details/125537962