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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Johnny_Hu 中级黑马   /  2015-4-8 21:36  /  925 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package SetPackage;
  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. public class HashSetDemo1 {

  5.         public static void main(String[] args)
  6.         {       
  7.                 HashSet hs = new HashSet();
  8.                 hs.add("Java04");
  9.                 hs.add("Java03");
  10.                 hs.add("Java02");
  11.                 hs.add("Java02");
  12.                 hs.add("Java01");
  13.                 hs.add("Java01");
  14.                 hs.add("Java01");
  15.                 for(Iterator it = hs.iterator(); it.hasNext();)
  16.                 {
  17.                         Person2 obj = (Person2) it.next();
  18.                         System.out.println(obj.toString()+" ");//迭代器输出
  19.                 }
  20.         }

  21. }

  22. class Person2
  23. {
  24.         private String name;
  25.         private int age;
  26.         Person2(String name,int age)
  27.         {
  28.                 this.name = name;
  29.                 this.age = age;
  30.         }
  31.         public void setName(String name)
  32.         {
  33.                 this.name = name;
  34.         }
  35.         public void setAge(int age)
  36.         {
  37.                 this.age = age;
  38.         }       
  39.         public String toString()
  40.         {
  41.                 return this.name+this.age;
  42.         }
  43.         public int hashCode()
  44.         {
  45.                 return name.hashCode()+age*13;
  46.         }
  47.         public boolean equals(Object obj)
  48.         {
  49.                 Person2 p =(Person2)obj;
  50.                 if(obj instanceof Person2)
  51.                         return false;
  52.                 return this.name.equals(p.name) && this.age == p.age;
  53.         }
  54. }
复制代码
抛出这个异常java.lang.ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常
可是我另外写的一个demo跟这个几乎一样的 可是那个为什么就可以强转呢?

4 个回复

倒序浏览
Person2类中的equals方法有问题
  1. public boolean equals(Object obj)
  2.         {
  3.                          if(!(obj instanceof Person2))
  4.                         return false;
  5.                 Person2 p =(Person2)obj;               
  6.                 return this.name.equals(p.name) && this.age == p.age;
  7.         }
复制代码


应该是判断对象不是Person2类型时返回false  另外,在迭代器获取集合中元素的时候,你的集合中的元素明明都是String类型的,为嘛要加这句  Person2 obj = (Person2) it.next();  将String类型转换成Person2类型这样肯定会出异常。。。
回复 使用道具 举报
关山明月 发表于 2015-4-8 23:12
Person2类中的equals方法有问题

:)太谢谢你了 上面的 hs.add(new Person2("Java4", 02));  忘记写new Person2
难怪提示强转失败了

太谢谢你了
回复 使用道具 举报
恩呢,看着看着就懂了好多,知道怎么看代码了
回复 使用道具 举报
前来学习了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马