Java中Object类中提供的相关方法之hashcode(),toString(),finalize()

  1. hashCode()方法:用于获取对象的哈希码。哈希码是根据对象的内部状态所计算出的一个整数,可以用于比较对象的相等性。

    • 方法签名:public int hashCode()
    • 作用:返回对象的哈希码值,用于在哈希表等数据结构中快速定位对象,提高哈希表的性能
    • 默认实现:Object类中的hashCode()方法默认返回对象的内存地址的哈希码值
    • 使用细节:
      • hashCode()方法的返回值是int类型的,通常是一个整数。
      • 如果两个对象的hashCode()返回值相同,不一定表示这两个对象相等(一般情况下是可以说明两个对象相等),因为可能存在哈希冲突
      • 哈希值不能等价于地址,因为Java是在JVM中执行的,并不是真正的地址
      • 重写equals()方法时,通常也需要重写hashCode()方法,以保证相等的对象具有相同的哈希码值。
public class Hashcode {
    public static void main(String[] args) {
        A a = new A();
        A a1 = new A();
        A a2 = a1;
        System.out.println(a.hashCode());//460141958
        System.out.println(a1.hashCode());//1163157884
        System.out.println(a2.hashCode());//1163157884
    }
}

class A{
}
  1. toString()方法:用于返回对象的字符串表示形式。默认情况下,toString()方法返回的字符串包含对象的类名和哈希码

    • 方法签名:public String toString()
    • 作用:返回对象的字符串表示形式,通常用于打印对象的信息
    • 默认实现:Object类中的toString()方法默认返回对象的全类名(包名+类名)+@+哈希值的十六进制
    • 使用细节:
      • toString()方法的返回值是String类型的,通常是一个描述对象的字符串。
      • 可以根据需要重写toString()方法,以返回自定义的字符串表示形式。
      • 当直接输出一个对象时,toString方法会被默认的调用
public class ToString {
    public static void main(String[] args) {
        AA aa = new AA();
        System.out.println(aa.toString());//AA{name='null', age=0}
        System.out.println(aa);//AA{name='null', age=0}
        //当注释掉类AA中的toString()时,两个输出结果都为 
        //com.example.retcode.test.object.AA@1b6d3586                    
    }
}

class AA {
    private String name;
    private int age;

    public AA() {
    }

    public AA(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "AA{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  1. finalize()方法:是Java垃圾回收机制中的一个方法,用于在对象被回收之前执行清理操作。该方法不建议使用,因为它的执行时机不可确定,甚至可能不执行

    • 方法签名:protected void finalize() throws Throwable
    • 作用:在对象被垃圾回收器回收之前调用,用于执行一些清理操作
    • 默认实现:Object类中的finalize()方法默认为空方法,不做任何操作
    • 使用细节:
      • finalize()方法通常不需要手动调用,由垃圾回收器自动调用。也可以通过System.gc()主动触发垃圾回收机制
      • 可以根据需要重写finalize()方法,以释放对象占用的资源,如关闭文件、释放网络连接等
      • 当某个对象没有任何引用时(对象引用=null),JVM就会人为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁对象前会调用finalize方法。
      • 对象的finalize()方法只会被调用一次,因此不应该依赖该方法进行资源清理
      • finalize()方法应该被视为一个备选方案,仅在没有其他方式可以清理资源时使用。
public class Finalize {
    public static void main(String[] args) {
        AAA aaa = new AAA();
        aaa = null;
        System.gc();//如果注释掉这句话,则输出结果为程序结束,并不会输出垃圾回收,因为垃圾不会立马回收,系统有自己的垃圾回收算法机制,但是程序执行的非常快,还没来得急回收就已经结束了
        System.out.println("程序结束");

    }
}
class AAA{
    @Override
    protected void finalize() throws Throwable {
        System.out.println("垃圾回收");
    }
}

 输出结果:

程序结束
垃圾回收

因为程序执行要比回收快,所以执行结果为程序结束 垃圾回收 而不是 垃圾回收 程序结束 

你可能感兴趣的:(java,开发语言)