import java.util.HashSet;
class B 
{
private String s;
public B(String s)
{
this.s = s;
}
public static void main(String[] args)
{
HashSet<Object> js = new HashSet<Object>();
B b1 = new B("aa");
B b2 = new B("aa");
String s1 =  new String("bb");
String s2 =  new String("bb");
System.out.println(s1);
System.out.println(s2);
js.add(b1);
js.add(b2);
js.add(s1);
js.add(s2);
System.out.println(js.size());
}
}
这段代码为什么输出是3而不是4,记得老师讲过只要new就产生新的对象?

解决方案 »

  1.   

    这个跟new没关系,hashset不能存放相同的值,而由于s1 和s2 一样,导致只存进去一个,所以size 为3
      

  2.   

    HashSet不能有重复值,所谓重复,在这里你可以理解为是否equals()
    显然 b1.equals(b2)=false;
    而s1.equals(s2)=true;(因为String类重写了equals方法)
    所以s1和s2重复了,造成了只有3个值
      

  3.   


    楼上解释很清楚。HashSet不允许有重复的值
      

  4.   

    HashSet 不能有重复值,其会调用类的equals()方法判断对象是否相等
    默认的equals()是判断类内存地址是否相等,比如你的类没有重载equals()就是这样。
    String重载了equals()方法,他判断String本身的值是否相等