黑马程序员技术交流社区

标题: contains和instanceof的讨论 [打印本页]

作者: 朱晓盼    时间: 2014-4-25 12:10
标题: contains和instanceof的讨论
这几天在总结集合这部分,做了几个练习,这几个练习里面都使用到了contains和instanceof;原本觉得风马牛不相及的东西,突然间让我混乱了,自己敲代码的时候,好几次错用了contains和instanceof,
先把代码贴上,然后向大家说说我的疑惑
  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.         public boolean equals(Object obj)
  12.         {
  13.                 /*
  14.                 这里的instanceof
  15.                 */
  16.                 if(!(obj instanceof Person))
  17.                         return false;

  18.                 Person p = (Person)obj;

  19.                 return this.name.equals(p.name) && this.age == p.age;
  20.         }
  21.         public String getName()
  22.         {
  23.                 return name;
  24.         }
  25.         public int getAge()
  26.         {
  27.                 return age;
  28.         }
  29. }
  30. class ArrayListTest2
  31. {
  32.         public static void sop(Object obj)
  33.         {
  34.                 System.out.println(obj);
  35.         }
  36.         public static void main(String[] args)
  37.         {
  38.                 ArrayList al = new ArrayList();

  39.                 al.add(new Demo());

  40.                 al.add(new Person("lisi01",30));
  41.                 al.add(new Person("lisi02",32));
  42.                 al.add(new Person("lisi02",32));
  43.                 al.add(new Person("lisi04",35));
  44.                 al.add(new Person("lisi03",33));
  45.                 al.add(new Person("lisi04",35));

  46.                
  47.                 al = singleElement(al);


  48.                 Iterator it = al.iterator();


  49.                 while(it.hasNext())
  50.                 {
  51.                         Person p = (Person)it.next();
  52.                         sop(p.getName()+"::"+p.getAge());
  53.                 }
  54.         }


  55.         public static ArrayList singleElement(ArrayList al)
  56.         {
  57.                 ArrayList newAl = new ArrayList();

  58.                 Iterator it = al.iterator();

  59.                 while(it.hasNext())
  60.                 {
  61.                         Object obj = it.next();
  62.                         /*
  63.                         这里的contains方法
  64.                         */
  65.                         if(!newAl.contains(obj))
  66.                                 newAl.add(obj);

  67.                 }

  68.                 return newAl;
  69.         }
  70. }
复制代码
让我混乱的地方:
通过上面的代码大家会发现这两个词(暂时用词代替吧),有着类似的表面意思:包含
我错用的状况是这样的,该用instanceof的地方使用了contains,也反过来用过。

后来我查了下资料,了解了一点信息:
instanceof : 关键字,常用于判断实例
上面代码中的体现:两端都是对象
contains() : String类中的方法


上面代码中的体现:引用类型变量调用contains方法,传入的是对象。

不过老感觉别扭啊,不知道是不是我有些知识点还没掌握,
大家说下自己的意见。



作者: skill20    时间: 2014-4-25 12:38
说一下我的见解。
instanceof 作用是测试左边的对象是否是右边的类的实例。

contains 是一般是判断某个集合里是否包含某个对象。在容器比较的时候很常见。
作者: kuroro自走核炮    时间: 2014-4-25 12:48
我觉得把instanceof 理解为包含不太合适吧?
这个词是Java、php的一个二元操作符(运算符),和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。
按我的理解,比如说类是设计图或者原料,实例是成品,这个词作用就是根据成品去找设计图和原料,比如判断一个塑料椅子是不是塑料做的呢?你回答是或者不是,但你说塑料椅子包含在塑料原料中,我觉得就有点不太合适了。
而contains方法一般是判断什么中有什么。比如说问:你家有电视么?你可以回答有还是没有。
我对这俩词的理解就是这样的,不知道对你有没有帮助。
作者: 朱晓盼    时间: 2014-4-25 15:26
kuroro自走核炮 发表于 2014-4-25 12:48
我觉得把instanceof 理解为包含不太合适吧?
这个词是Java、php的一个二元操作符(运算符),和==,>, ...

你说的很容易理解,谢谢
作者: 世界公民    时间: 2014-4-25 16:43
很好学习了!:)
作者: 左拉    时间: 2014-4-25 16:53
instanceof用于用于判断实例,即判断左边的对象是不是右边类的一个实例,它判断的是数据类型
if(20 instanceof Integer)
if(new Person() instanceof Person)

contains判断是否存在,判断的是内容是否存在
比如:
list.add("a");
list.add("b")
if(list.contains("a"))
作者: igi9009    时间: 2014-4-25 16:56
instanceof不应该理解为包含吧,
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

contains是是否包含的意思,那肯定左边的对象是一个容器了
String也有一个contains,那是因为String是一个字符的容器
作者: eternallove    时间: 2014-4-25 17:33
contains()方法在集合中用在这个集合中是否包含某个对象                  集合对象.contains(对象)。
contanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。




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