请教下equals重写与==问题

Luke_Zheng 2019-08-11 01:03:52
equals源代码是使用==实现两对象比较的,即默认比较的是两个对象的内存地址。
equals改写后使用==比较两个对象,为什么此处表示的是比较两对象的值?

public boolean equals(Object obj) {
User user=(User)obj;
return this.id==user.id;


...全文
148 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Luke_Zheng 2019-08-13
  • 打赏
  • 举报
回复
引用 4 楼 northwesternwind 的回复:
[quote=引用 3 楼 northwesternwind 的回复:]
equals默认是比较地址,但是对于User.id是不是比较地址要根据情况看。
1. User.id为int或者long ==>比较数值
2. User.id为Integer ==>比较数值,因为Integer类重写了equals
3. User.id 为String ==>比较id的字符串内容,因为String类重写了equals.


这么回答怎么样?

抱歉看岔了,请忽略。这种情况推断User.id应该是int或者long这种基本类型,这样的话用==比较就是比较数值是否相等。
[/quote]好的,谢谢指导🙏
northwesternwind 2019-08-13
  • 打赏
  • 举报
回复
引用 3 楼 northwesternwind 的回复:
equals默认是比较地址,但是对于User.id是不是比较地址要根据情况看。
1. User.id为int或者long ==>比较数值
2. User.id为Integer ==>比较数值,因为Integer类重写了equals
3. User.id 为String ==>比较id的字符串内容,因为String类重写了equals.


这么回答怎么样?

抱歉看岔了,请忽略。这种情况推断User.id应该是int或者long这种基本类型,这样的话用==比较就是比较数值是否相等。
northwesternwind 2019-08-13
  • 打赏
  • 举报
回复
equals默认是比较地址,但是对于User.id是不是比较地址要根据情况看。
1. User.id为int或者long ==>比较数值
2. User.id为Integer ==>比较数值,因为Integer类重写了equals
3. User.id 为String ==>比较id的字符串内容,因为String类重写了equals.


这么回答怎么样?
qq_39936465 2019-08-12
  • 打赏
  • 举报
回复
引用 楼主 瑠可_123 的回复:
equals源代码是使用==实现两对象比较的,即默认比较的是两个对象的内存地址。 equals改写后使用==比较两个对象,为什么此处表示的是比较两对象的值?

public boolean equals(Object obj) {
           User user=(User)obj;
           return this.id==user.id; 
id变量如果是基本类型可以直接用==。基本类型都在常量池中,值等价于地址。
  • 打赏
  • 举报
回复
你这个重写方法展现的逻辑应该是,当前类中的id属性(这个id属性也是一个对象)与传进来的obj的id属性(这个属性也是一个对象)相比较,这个比较也是通过内存地址比较的,并非是比较他们的值啊。最终equal的重写的的判断逻辑应该是:当两个对象的id属性的内存地址相同,既表示这个对象相等。

62,614

社区成员

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

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