我们老师给了我们一个程序,结果运行出来为什么是False?我怎么看都觉得是True啊import java.util.*;public class aa{
private final String first,last;
public aa(String first,String last){
this.first=first;this.last=last;
}
public boolean equals(aa n){
return n.first.equals(first) && n.last.equals(last);
}
public int hashCode(){
return first.hashCode()+last.hashCode();
}
public static void main(String arg[]){
Set<aa> s=new HashSet<aa>();
s.add(new aa("Tom","Cruise"));
System.out.println(s.contains(new aa("Tom","Cruise")));
}
}能讲解下吗?
private final String first,last;
public aa(String first,String last){
this.first=first;this.last=last;
}
public boolean equals(aa n){
return n.first.equals(first) && n.last.equals(last);
}
public int hashCode(){
return first.hashCode()+last.hashCode();
}
public static void main(String arg[]){
Set<aa> s=new HashSet<aa>();
s.add(new aa("Tom","Cruise"));
System.out.println(s.contains(new aa("Tom","Cruise")));
}
}能讲解下吗?
楼主【ying0305】截止到2008-06-24 10:53:46的历史汇总数据(不包括此帖):
发帖数:12 发帖分:290
结贴数:11 结贴分:260
未结数:1 未结分:30
结贴率:91.67 % 结分率:89.66 %
值得尊敬
如果 set 包含指定的元素,则返回 true。这是我API档的写法,莫非API档都有不同的?
指向的内存地址不一样.
System.out.println(s.contains(new aa("Tom","Cruise"))); //比较新建的对象
contains方法指的是对象地址,两个都是新建对象,地址不同,当然为False
唯一能解释的应该是Set中存放的是一个对aa对象的引用,而Set比较两个元素是否相等不是调用该元素的equals()方法(API上写是调用元素的equals方法,但是楼主重写了equals方法,两个元素是相等的),而是直接比较两个元素的引用是否指向同一地址,如果是则相等