day9 Object类

什么是Object类

Object是所有类的父类,在java.lang包

Object类常用方法

  1. clone() 创建并返回此对象的副本,与引用传递不同。
  2. equals() 指示其他某个对象是否与此对象 “相等”
  3. finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的回收器调用此方法。
  4. getclass() 返回此Object运行时的类
  5. hashCode() 返回该对象的哈希码值
  6. notify() 唤醒此对象监视器上等待的单个线程
  7. notifyAll() 唤醒此对象监视器上等待的所有线程
  8. toString() 返回该对象的字符串表示
  9. wait() 等待
  10. wait(long timeout)
  11. wait(long timeout, int nanos)

== 和 equals对比

  1. == 是比较运算符,既然比较基本类型,也可以比较引用类型。
    比较基本类型时比较值,比较引用类型时比较地址。
  2. equals 是Object类的方法,只能用于比较引用类型,不能比较基本数据类型
    Object类中的equals源码:
    public boolean (Object obj){
    	return (this == obj);
    }
    
    举例
    public class Compare {
        public static void main(String[] args) {
            String s1= new String("a");
            String s2= new String("a");
            String s3="a";
            String s4="a";
            System.out.println(s1==s2);
            System.out.println(s3==s4);
            System.out.println(s1.equals(s2));
        }
    }
    //false
    //true
    //true
    

重写equals()方法

重写前由于调用的是父类的Object类的equals()方法,仅作一次地址比较,两个对象的地址不同,因此输出false

public class OverrideEqualsMethod {
    public int a;
    public String b;

    public OverrideEqualsMethod(int a, String b) {
        this.a = a;
        this.b = b;
    }

    public static void main(String[] args) {
        OverrideEqualsMethod overrideEqualsMethod = new OverrideEqualsMethod(1,"str");
        OverrideEqualsMethod overrideEqualsMethod2 = new OverrideEqualsMethod(1,"str");
        System.out.println(overrideEqualsMethod.equals(overrideEqualsMethod2));
    }
}
//false

重写后,输出true

import java.util.Objects;

public class OverrideEqualsMethod {
    public int a;
    public String b;

    public OverrideEqualsMethod(int a, String b) {
        this.a = a;
        this.b = b;
    }

    public static void main(String[] args) {
        OverrideEqualsMethod overrideEqualsMethod = new OverrideEqualsMethod(1,"str");
        OverrideEqualsMethod overrideEqualsMethod2 = new OverrideEqualsMethod(1,"str");
        System.out.println(overrideEqualsMethod.equals(overrideEqualsMethod2));
    }

    @Override
    public boolean equals(Object o) {
        // ==比较地址,如果是对象自己,立刻返回true
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        //向下转型
        OverrideEqualsMethod that = (OverrideEqualsMethod) o;
        return a == that.a && Objects.equals(b, that.b);
    }
}
//true

hashCOde()

+

toString()

返回该对象的字符串表示
默认返回 全类名 + “@” + hashCode()的十六进制
Object类的toString()源码

public String toString(){
	return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

重写toString()

未重写

public class OverrideToStringMethod {
    public int a;
    public String b;

    public static void main(String[] args) {
        OverrideToStringMethod overrideToStringMethod = new OverrideToStringMethod(1,"str");
        System.out.println(overrideToStringMethod);
    }

    public OverrideToStringMethod(int a, String b) {
        this.a = a;
        this.b = b;
    }
}
//com.hello.out.OverrideToStringMethod@36d64342

重写后

public class OverrideToStringMethod {
    public int a;
    public String b;

    public static void main(String[] args) {
        OverrideToStringMethod overrideToStringMethod = new OverrideToStringMethod(1,"str");
        System.out.println(overrideToStringMethod);
    }

    public OverrideToStringMethod(int a, String b) {
        this.a = a;
        this.b = b;
    }
    @Override
    public String toString() {
        return "OverrideToStringMethod{" +
                "a=" + a +
                ", b='" + b + '\'' +
                '}';
    }
}
//OverrideToStringMethod{a=1, b='str'}

finalize()

类似于析构函数,在对象被销毁前自动被调用。
Java9之后不推荐使用finalize()了,实际开发中基本不会使用。

重写finalize()

public class OverrideFinalizeMethod {
    int n;

    public static void main(String[] args) {
        OverrideFinalizeMethod overrideFinalizeMethod = new OverrideFinalizeMethod(10);
        // 此时 new出来的对象会被回收,回收前会调用finalize方法
        overrideFinalizeMethod = null;
        // 主动运行垃圾回收期
        System.gc();
    }
    public OverrideFinalizeMethod(int n) {
        this.n = n;
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("override finalize() is called.");
    }
}
//override finalize() is called.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值