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就产生新的对象?
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就产生新的对象?
显然 b1.equals(b2)=false;
而s1.equals(s2)=true;(因为String类重写了equals方法)
所以s1和s2重复了,造成了只有3个值
楼上解释很清楚。HashSet不允许有重复的值
默认的equals()是判断类内存地址是否相等,比如你的类没有重载equals()就是这样。
String重载了equals()方法,他判断String本身的值是否相等