看你比较什么了,有些类内部重写的equals方法,比如两个Integer的equals()比较就是直接比较其中的两个数值,所以set中对象比较建议使用==号比较Integer中的equals()方法原型,大致为
public boolean equals(Object o)
{
if(o instanceof Integer)
{
return this.intValue()==((Integer)o).intValue();
}
else
{
return false;
}
}Object的equals方法原型就是
public boolean equals(Object o)
{
return this==o;
}
public boolean equals(Object o)
{
if(o instanceof Integer)
{
return this.intValue()==((Integer)o).intValue();
}
else
{
return false;
}
}Object的equals方法原型就是
public boolean equals(Object o)
{
return this==o;
}
我已经覆写了equals()方法
测试的时候,我在Set里放了三个User,有两个是刻意让他们相等的
然后
ArrayList array = new ArrayList();
while (iter.hasNext()) {
User user = (User)iter.next();
System.out.println(user);
array.add(user);
}
System.out.println("0 equals 1: " + array.get(0).equals(array.get(1)));
System.out.println("0 equals 2: " + array.get(0).equals(array.get(2)));结果:
0 equals 1: false0 equals 2: true
不同的Set实现方式不一样,不过一般都不会只用 == 的 ^_^
走前说一句
如果楼主用的是HashSet的话
如果楼主没有重写hashCode()方法的话
那么Set中不可避免允许相同的对象存在
因为HashSet中判断一个对象是否已经存在不是使用equals()方法,而是使用hashCode()方法这就是为什么Effective Java中说:重写equals()方法的同时要重写hashCode()方法如果用的不是HashSet
再找别的原因 ^_^
我想danceflash(Wine) 已经说出了原因:我没有重写hashCode()
但我没有看过这方面的资料,不懂得怎么重写hashCode()
看来暂时要用别的办法来替代了.
所以,==就无能为力了 :(