目录
测试hashCode()
本方法的作用是返回对应对象的int类型的哈希码值
本方法力求不用的对象返回的哈希码不同
这样我们就可以根据哈希值区分不同的对象
测试toString()
打印对象是println(),这个方法层层调用,一直到Object中的toString()
Object中toString()的默认实现,对象的名字@十六进制的哈希码值
子类重写了toString()以后;打印是对象的类型+属性+属性值
测试equals()
Object中的equals()的默认实现使用是==比较
==比较的是左右两边的值,如果是基本类型,比较额是字面意思,比如1==1,2==2,3==4
如果是引用类型,比较的是引用类型变量保存的地址值
*equals()与hashCode()逻辑要保持一致,要重写都重写,要不重写都不重写
如果不重写:hashCode()的哈希码根据地址值生成
equals()底层使用==比较两个对象的地址值
如果重写了:hashCode()的哈希码根据重写的属性值生成
equals()比较的是重写后类型+所有属性与属性值
例如:
Student s = new Student();
public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Student)) return false; //传入对象的类型是Object,父类无法使用子类特有属性,所以需要强转 Student student = (Student) o;//向下造型 /*把父类型Object转回为类型Student*/ return age == student.age && Objects.equals(name, student.name); }
此处用到多态,多态:
向上造型:把子类型看作父类型,
向下造型:
未完成。。。