黑马程序员技术交流社区

标题: contains方法中的this问题 [打印本页]

作者: 高鑫    时间: 2012-6-4 17:19
标题: contains方法中的this问题
  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呢???
作者: 姚玉鹏    时间: 2012-6-4 20:06
这个 应该是泛型的问题...  this本身就是Person类型,而Object 并不能保证是Person类型  需要强转成(Person)it.next();  it.next()=object 变成Person类型才能进行比较。
  
作者: 高鑫    时间: 2012-6-4 20:14
这样啊,还没学到,挂不得不明白
作者: 姚玉鹏    时间: 2012-6-4 20:17
高鑫 发表于 2012-6-4 20:14
这样啊,还没学到,挂不得不明白

学了泛型 就会更好理解这个问题了  我当时就是这样...
作者: 江南    时间: 2012-6-4 21:10
  return this.name.equals(p.name) && this.age==p.age;   //this为什么不用进行类型提升
this 代表Person 这份字节码 已经是Person对象了  就没有必要提升  比较的是Person  不是Obj





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2