求equals重写方法

小白云天 2016-04-10 06:52:23

为什么输出的是true啊,还有,我若是把==改成equals,就会异常。

求解这是怎么回事?
...全文
246 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼上说的很细致,受教了。
LoungerM 2016-04-11
  • 打赏
  • 举报
回复
Star-小东 2016-04-11
  • 打赏
  • 举报
回复
一、为什么是总是true 这个sen类的构造函数的初始化有问题,用super()是用来初始化继承的直接父类(没有显示继承父类默认为Object) 所有这个sen类的构造方法没有初始化本类的name和age字段,导致new的所有sen类的对象的这个两个字段为默认初始化值 即age默认初始化为0 所以恒为true 二、为什么== 换成 equals 异常问题 在这个重写的这个equals函数中继续invoke equals函数相当于递归调用(即自己调用自己),equals函数的参数类型是Object ,而函数的调用后首先做的是将Object对象强制类型转换为Sen对象,而你在用equals时传递的是Integer对象,而Integer对象是无法cast Sen类对象的,所以会抛出类型转化异常。 希望对你有帮助
豫让_______ 2016-04-11
  • 打赏
  • 举报
回复
首先,构造函数没有赋值。而且你这个重写的equals只判断了age都没有管name。最后就是建议hashcode一并重写,因为只重写了equals的话用 == 判断还是会先调用hashcode ,而set集合判断重复的时候是用 == 判断。
  • 打赏
  • 举报
回复
看他两个对象是否相等主要比较构造方法的行形参的值,你这个行参输入后没有赋给变量,所以不管你new多少个对象出来,他们一比较都是相等的,只是地址不同而已
kaflash 2016-04-11
  • 打赏
  • 举报
回复
true的原因就是age没有赋值
随风而飞_1 2016-04-10
  • 打赏
  • 举报
回复
因为两个对象的age的值都是0。你的构造函数没有给属性赋值
随风而飞_1 2016-04-10
  • 打赏
  • 举报
回复
this是sen对象,而a.age是int型的数据。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧