Object类时Java默认提供的类,是所有类的父类,它里面有好多便利的方法供我们使用
在我们看来,姓名年龄一样就应该是同一个人,但实际上运行结果却是false,看一下源码:
源码里面是在用俩个引用的值(也就是所谓的地址值)在进行比较,要想让它按我们的逻辑比较,我们就可以重写equals方法:
注意,治理必须发生向下转型,因为我们要用到Person类的成员变量,而父类无法引用子类的变量,所以要将obj强转为Person类
其实编译器可以帮我们生成equals方法
这是根据某个标准来获取哈希值
我们来看一下源码:
源码又是native修饰的,我们无法得知其实现逻辑,但我们可以自己重写方法,让俩个名字年龄相同的人有相同的哈希值
先看一下编译器帮我们生成的重写方法,点击右键,生成,选择equals and hashCode
再进入Objects.hash方法:
这里的values就是name,age;再进入Arrays.hashCode:
a是什么呢?
是哈希值的计算标准,所以这样重写的方法,只要name age相同,哈希值就相同,如下结果: