API(Object)

目录

Objects中:hashCode(),toString(),equals

hashCode()

toString()

equals()

 总结:


Objects中:hashCode(),toString(),equals

hashCode()

本方法用于返回对应对象的哈希码值
小贴士:哈希码值的得出是通过一种算法,意在让不同的对象具有不同的哈希码值,用于区分不同的对象.
但是有时候也存在不同对象哈希码值相同的特殊情况,我们称之为”哈希碰撞”现象

toString()

本方法用于返回对应对象的字符串表示

equals()

本方法用于指示其他某个对象是否与当前对象”相等”

Objects中的equals()的默认实现使用的是==比较

==比较的是左右两边的值,如果是基本类型,比较的是字面值

比如1和1,3.4和3.4

如果是引用类型,比较的是引用类型变量保存的地址值。

package cn.tedu.api;
import java.util.Objects;
/**
 * 本类用于顶级父类Object的入门案列
 */
public class TestObject {
    public static void main(String[] args) {
       Student s1=new  Student();
       Student s2=new  Student("张三",3,80,"3年级");
       Student s3=new  Student("张三",3,80,"3年级");

        /**
         * 测试hashCode()
         * 本方法的作用是返回对应对象的int类的哈希码值
         * 本方法力求不同的对象返回不同的哈希码值
         * 这样我们就可以根据哈希马值区分不同的对象
         */
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        /**
         * 负责打印s2对象的是println(),这个方法会层层向下调用,一直到Object中的Object
         * Objecrt类中toString()的默认实现打印的是对象的地址值
         * 子类Student重写了Object中的toString(),打印的是对象的类型+属性+属性值
         */
        System.out.println(s2.toString());
        System.out.println(s2);
        System.out.println(s2.equals(s3));
    }
}
class Student{
    String name;
    int age;
    double score;
    String Grade;
    public  Student(){
        System.out.println("无参构造");
    }

    public Student(String name, int age, double score, String grade) {
        System.out.println("全参构造~");
        this.name = name;
        this.age = age;
        this.score = score;
        Grade = grade;
    }
//生成子类重写的toString()
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                ", Grade='" + Grade + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Double.compare(student.score, score) == 0 &&
                Objects.equals(name, student.name) &&
                Objects.equals(Grade, student.Grade);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, score, Grade);
    }
}

无参构造
全参构造~
全参构造~
923521
708553057
Student{name='张三', age=3, score=80.0, Grade='3年级'}
Student{name='张三', age=3, score=80.0, Grade='3年级'}
true

 总结:

hashCode():默认实现:根据对象的地址值生成一个唯一的哈希码值

重写后:根据传入的属性值生成哈希码

toString():默认实现:打印对象的【类名@十六进制哈希码值】

重写后:Student自定义打印的是类型+所有属性和属性值。

equals():默认实现:比较两个对象的地址值,默认使用==比较

重写后:比较的是两个对象的类型+所有属性的属性值

综上:如果执行的效果与Object的默认效果不同,说明子类重写了该方法。

猜你喜欢

转载自blog.csdn.net/weixin_43762083/article/details/120847733