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;
    }

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;
        }
    }
}

三、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());
    }

五、finalize

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值