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方法后,会向下转型,就会出现类型转换异常


.

解决方法也很简单,使用instanceof关键字解决

posted @ 2025-03-10 16:19  直実  阅读(17)  评论(0)    收藏  举报