北大青鸟IT教育博客

 

JAVA中equals方法用法

  今天给学生讲解ArrayList集合用法,讲到contains方法的用法时,学生出现一个怪问题,contains方法检查集合是否包含对象时,明明包含该对象,但有时候返回false,有时候返回true。
  既然问到这个问题,就要从其源头来找原因,我带领他们查看contains方法的源代码,如下:
  public boolean contains(Object o) {
  return indexOf(o) >= 0;
  }
  于是我们找到indexOf方法的源代码,如下:
  public int indexOf(Object o) {
  if (o == null) {
  for (int i = 0; i < size; i++)
  if (elementData[i]==null)
  return i;
  } else {
  for (int i = 0; i < size; i++)
  if (o.equals(elementData[i]))
  return i;
  }
  return -1;
  }
  发现最终如果对象不为空的情况下是用equals方法来比较对象是否相等的。于是继续找到equals的源代码,如下:
  public boolean equals(Object obj) {
  return (this == obj);
  }
  终于发现原因所在,原来Object中的equals方法是用==来比较两个对象的,那么在我们自己写的实体类中必须重写equals方法,最后修改如下:
  public class User {
  private String name;
  private String pass;
  public User(String name, String pass) {
  super();
  this.name = name;
  this.pass = pass;
  }
  public User() {
  super();
  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getPass() {
  return pass;
  }
  public void setPass(String pass) {
  this.pass = pass;
  }
  @Override
  public boolean equals(Object obj) {
  if(obj == null){
  return false;
  }
  if(this == obj){
  return true;
  }
  if(obj instanceof User){
  User u = (User)obj;
  if(this.name.equals(u.name)){
  return true;
  }else{
  return false;
  }
  }else{
  return false;
  }
  }
  }
  测试了一下,通过。(北大青鸟武汉鲁广校区 王老师指导)

posted on 2009-08-28 14:14 武汉北大青鸟 阅读(574) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章档案

默认

搜索

最新评论

阅读排行榜

评论排行榜