Object类解释

equals方法

==和equals的区别

==:是一个比较运算符

  • 既可以判断基本类型也可以判定引用类型。
  • 如果判断基本类型,判断的是值是否相等。
  • 如果判断引用类型,判断的是地址是否相等(判断是否为同一对象)

equals方法:是Object类中的方法,只能判断引用类型,默认判断的是地址是否相等,子类通常重写该方法,用于判断内容是否相等

hashCode方法

返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。

toString方法

基本介绍:默认返回全类名+@+哈希值的十六进制,toString:就是hashCode转为十六进制。

源码
 public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
// getClass().getName(),表示类的全名即包名+类名
// Integer.toHexString(hashCode()),表示把对象的hashCode值转换为十六进制的字符串
例子
 public class min {
    public static void main(String[] args) {
        
        Monster monster = new Monster("妖怪", "巡山", 1000);
        System.out.println(monster.toString());

    }
}
class Monster{
    private String name;
    private String Job;
    private double sal;

    public Monster(String name, String job, double sal) {
        this.name = name;
        Job = job;
        this.sal = sal;
    }
}

重写toString方法,打印对象或拼接对象时,都会自动调用该对象的toString形式。

查看代码
 public class min {
    public static void main(String[] args) {

        Monster monster = new Monster("妖", "巡山", 1000);
        System.out.println(monster);// 等价于monster.toString()

    }
}
class Monster{
    private String name;
    private String Job;
    private double sal;

    public Monster(String name, String job, double sal) {
        this.name = name;
        Job = job;
        this.sal = sal;
    }

    @Override
    public String toString() {//默认重写后是把对象的属性值输出,可自行修改
        return "Monster{" +
                "name='" + name + '\'' +
                ", Job='" + Job + '\'' +
                ", sal=" + sal +
                '}';
    }
}

 finalize的用法

当对象被回收时,系统自动调用该对象的 finalize方法。子类可以重写 finalize方法。

实际开发中几乎不会用到 finalize方法,但是要明白 finalize的运行机制。

查看代码
 public class Test {
    //Finalize的用法
    public static void main(String[] args) {
        Car car = new Car("car");
        car = null; // car没有任何引用所以car对象是一个垃圾,
        // 垃圾回收器就会销毁对象销毁前会调用该对象的finalize方法。在finalize可以重写
        System.gc();
        System.out.println("程序退出了");
    }
}
class Car{
    private String name;

    public Car(String name) {
        this.name = name;
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("car类被销毁了");
    }
}

 

posted @ 2024-04-03 23:40  Dr丶云幕  阅读(2)  评论(0编辑  收藏  举报