A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-6-4 17:19  /  1474 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.     import java.util.*;
  2.     class Person
  3.     {
  4.             private String name;
  5.             private int age;
  6.             Person(String name,int age)
  7.             {
  8.                     this.name=name;
  9.                     this.age=age;
  10.             }        
  11.             
  12.             public boolean equals(Object obj)
  13.             {
  14.                     if(!(obj instanceof Person))
  15.                             return false;
  16.                     Person p=(Person)obj;
  17.                     return this.name.equals(p.name) && this.age==p.age;   //this为什么不用进行类型提升
  18.             }
  19.             
  20.             public  String getName()
  21.             {
  22.                     return name;        
  23.             }
  24.             public   int getAge()
  25.             {
  26.                     return age;        
  27.             }
  28.     }

  29.     class ArrayListTest
  30.     {
  31.             public static void sop(Object obj)
  32.             {
  33.                     System.out.println(obj);        
  34.             }
  35.             public static void main(String args[])
  36.             {
  37.                 ArrayList al= new ArrayList();
  38.                 al.add(new Person("lisi01",30));
  39.                 al.add(new Person("lisi02",32));
  40.                 al.add(new Person("lisi02",32));
  41.                 al.add(new Person("lisi03",35));
  42.                 al.add(new Person("lisi04",33));
  43.                
  44.                 al=singelElement(al);
  45.                
  46.                 Iterator it =al.iterator();
  47.                 while(it.hasNext())
  48.                 {
  49.                         Person p=(Person)it.next();        
  50.                         sop(p.getName()+"..."+p.getAge());
  51.                 }
  52.             }
  53.             public static ArrayList singelElement(ArrayList al)
  54.             {
  55.                     ArrayList newal=new ArrayList();
  56.                     Iterator it =al.iterator();
  57.                     while(it.hasNext())
  58.             {
  59.                     Object obj=it.next();
  60.                     if(!newal.contains(obj))
  61.                             newal.add(obj);
  62.                   
  63.             }        
  64.                     return newal;
  65.             
  66.             }
  67.     }


复制代码
本题是老师视频的例题,我的问题是关于 contains方法的,查阅API知道public boolean contains(Object o)中实际是 (o==null ? e==null : o.equals(e)),就是说程序中的if(!newal.contains(obj))中的obj就是调用的是obj.equals(e),在Person类中public boolean equals(Object obj),这里的equals(Object obj)中的Object obj是API中的e,可是调用者this也是obj类型啊,为什么this不用提升就可以使用this.name呢???

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

4 个回复

倒序浏览
这个 应该是泛型的问题...  this本身就是Person类型,而Object 并不能保证是Person类型  需要强转成(Person)it.next();  it.next()=object 变成Person类型才能进行比较。
  
回复 使用道具 举报
这样啊,还没学到,挂不得不明白
回复 使用道具 举报
高鑫 发表于 2012-6-4 20:14
这样啊,还没学到,挂不得不明白

学了泛型 就会更好理解这个问题了  我当时就是这样...
回复 使用道具 举报
  return this.name.equals(p.name) && this.age==p.age;   //this为什么不用进行类型提升
this 代表Person 这份字节码 已经是Person对象了  就没有必要提升  比较的是Person  不是Obj

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马