equals方法

Adebayor 2009-04-13 03:45:36
在java的String类中 使用equals方法的最好与最坏的时候分别是什么?
在此谢谢大家的帮助!
...全文
170 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Adebayor 2009-04-14
  • 打赏
  • 举报
回复
这个问题 难道真的就没有人会了吗?
micg2233 2009-04-14
  • 打赏
  • 举报
回复
必须学习一下
Butterfly_Legend 2009-04-14
  • 打赏
  • 举报
回复
equals方法比较的是内存地址是否相等,重写equals时hashcode也应该跟着重写,假如定义的对象不能重复,并且有一个主属性时,equals方法就要重写,如果定义的对性可重复,则不用重写,但equals大多被重写,个人认为这与数据库中的表有关系,表一般都有主键,并且不能重复,所以...
Adebayor 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ty_tarena_pger 的回复:]
    我们都知道在Java规范里定义了equals方法覆盖的5大原则:reflexive(反身性),symmetric(对称性),transitive(传递性),consistent(一致性),non-null(非空性)。那么考察下面的代码:
Java code

public class Student{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(Object obj){

[/Quote]
恩 挺深刻的
ty_tarena_pger 2009-04-14
  • 打赏
  • 举报
回复
我们都知道在Java规范里定义了equals方法覆盖的5大原则:reflexive(反身性),symmetric(对称性),transitive(传递性),consistent(一致性),non-null(非空性)。那么考察下面的代码:

public class Student{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public boolean equals(Object obj){
if(obj instanceof Student){
Student s=(Student)obj;
if(s.name.equals(this.name) && s.age==this.age){
return true;
}
}
return super.equals(obj);
}
}



你认为上面的代码equals方法的覆盖安全吗?表面看起来好像没什么问题,这样写也确实满足了以上的五大原则。但其实这样的覆盖并不很安全,假如 Student类还有一个子类CollegeStudent,如果我拿一个Student对象和一个CollegeStudent对象equals,只要这两个对象有相同的name和age,它们就会被认为相等,但实际上它们是两个不同类型的对象啊。问题就出在instanceof这个运算符上,因为这个运算符是向下兼容的,也就是说一个CollegeStudent对象也被认为是一个Student的实例。怎样去解决这个问题呢?那就只有不用 instanceof运算符,而使用对象的getClass()方法来判断两个对象是否属于同一种类型,例如,将上面的equals()方法修改为:
   public boolean equals(Object obj){
if(obj.getClass()==Student.class){
Student s=(Student)obj;
if(s.name.equals(this.name) && s.age==this.age){
return true;
}
}
return super.equals(obj);
}

这样才能保证obj对象一定是Student的实例,而不会是Student的任何子类的实例。
lin_eric 2009-04-14
  • 打赏
  • 举报
回复
equal()方法一般是要重写的,用于比较两个对象的内容是否相同~
yangkaixin1226 2009-04-13
  • 打赏
  • 举报
回复
equals方法,只是用来判断对象是否相等,多应该被重写,而且hashcode也应该被重写,不过问道最好与最坏的情况,确实是有些不好回答
Adebayor 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kokobox 的回复:]
什么是最坏的时候?这个还要分好时候坏时候吗?


[/Quote]
恩 面试时 人家就这么提问的
cjg520jie 2009-04-13
  • 打赏
  • 举报
回复
去看下hashcode和equals 2个方法,同是比较用的,你就会明白equals 到底如何用了
kokobox 2009-04-13
  • 打赏
  • 举报
回复
什么是最坏的时候?这个还要分好时候坏时候吗?

huangxiaoyong 2009-04-13
  • 打赏
  • 举报
回复

String类的equals()方法做了重写,表示:
将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true

没有最好和最坏的时候,只有用的最恰当时候
Adebayor 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawn023 的回复:]
没有最好最坏,只有合适
^_^
[/Quote]
那你该说说什么时候合适 什么时候不合适呢
dawn023 2009-04-13
  • 打赏
  • 举报
回复
没有最好最坏,只有合适
^_^

62,614

社区成员

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

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