hashCode方法

2024-01-07 20:36:56
/**
 * @Description hashCode方法
 */
package com.chapter.demo05;

public class Student {

    private String name;
    private int age;

    public Student() {
    }

    public Student(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;
    }

    //重写 toString方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    //重写 equals方法
    @Override
    public boolean equals(Object obj){
        //1.判断两个对象是否是同一个引用
        if(this == obj){
            return true;
        }
        //2.判断obj是否是null
        if(obj == null){
            return false;
        }
        //3.判断是否是同一个类型
        /**
         if(this.getClass() == obj.getClass()){

        }*/

        //intanceof 判断对象是否是某种类型
        if(obj instanceof Student){
            //4.强制类型转换
            Student s=(Student) obj;
            //5.比较熟悉
            if(this.name.equals(s.getName()) && this.age == s.getAge()){
                return true;
            }
        }
        return false;
    }

    //重写 finalize方法
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.name+"对象被回收了");
    }
}

/**
 * @Description hashCode方法
 */
package com.chapter.demo05;

public class TestStudent {

    public static void main(String[] args) {

        Student s1 = new Student("aaa",20);
        Student s2 = new Student("bbb",22);

        //判断 s1和 s2 是不是同一个类型
        Class class1 = s1.getClass();
        Class class2 = s2.getClass();
        if(class1 == class2){
            System.out.println("s1和s2属于同一个类型");
        }else {
            System.out.println("s1和s2不属于同一个类型");
        }

        //hashCode方法
        System.out.println("-----------2.hasCode---------------");
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        Student s3 = s1;
        System.out.println(s3.hashCode());

        //toString方法
        System.out.println("-----------3.toString---------------");
        System.out.println(s1.toString());
        System.out.println(s2.toString());

        //equals方法:判断两个对象是否相等
        System.out.println("-----------4.equals---------------");
        System.out.println(s1.equals(s2));

        Student s4 = new Student("小明",17);
        Student s5 = new Student("小明",17);
        System.out.println(s4.equals(s5));

    }

}

/**
 * @Description hashCode方法
 */
package com.chapter.demo05;

public class TestStudent2 {

    public static void main(String[] args) {

/** 这样定义不会被回收
        Student s1 = new Student("aaa",20);
        Student s2 = new Student("bbb",20);
        Student s3 = new Student("ccc",20);
        Student s4 = new Student("ddd",20);
        Student s5 = new Student("eee",20);
*/

        new Student("aaa",20);
        new Student("bbb",20);
        new Student("ccc",20);
        new Student("ddd",20);
        new Student("eee",20);

        //回收垃圾
        System.gc();
        System.out.println("回收垃圾");

    }

}

/**     finalize()方法
 * 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
 * 垃圾对象:没有有效引用指向此对象是,为垃圾对象
 * 垃圾回收:有GC销毁垃圾对象,释放数据存储空间。
 * 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。
 * 手动回收机制:使用System.gc; 通知JVM执行垃圾回收。
 */

文章来源:https://blog.csdn.net/my_lucky_bird/article/details/135444072
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。