Object类--equals方法--java进阶day05
1.equals方法
2.equals方法的逻辑
如图,我们发现调用equals方法将两个属性一样的变量进行比较时,返回的还是false
为了了解清楚equals方法的逻辑,我们ctrl 鼠标右键点击equals方法进入方法内部
如上图,默认的equals方法使用等号,比较的是两个变量的地址,非常鸡肋,这也是刚才返回false的原因
3.重写equals方法
当某个方法默认功能非常鸡肋时,我们便可以使用重写,改进其功能
equals方法将来肯定会被调用,发起调用的对象在equals方法里就可以用this表示,而另一个就作为参数obj传递过来
因为stu1和stu2无法直接在equals方法里使用,所以要强调this和obj
如下图,出现这种问题,是因为多态
形参是父类,这里我们传递的是子类,使用了多态
多态成型后,调用成员变量的时候,编译会看父类,而父类Object,很明显是没有我们定义的age的,所以会报错
因此,我们使用向下转型
此时,age和name便都可以进行比较了
3.重写equals后的安全隐患
在上图,我们写的代码还存在安全隐患,如图
Arraylist也是Object的子类,按照道理也可以放入形参,但是Arraylist和Student明显类型不同
调用equals方法后,会向下转型,就会出现类型转换异常
.