import java.util.*;
public class BasicContainer {
    public static void main(String args[]) {
        Collection c = new HashSet();
        Name n = new Name("ye","dame");
        Name m = new Name("ye","dame");
        c.add(n);
        System.out.println(c.remove(m));
        System.out.println(c);
    }
}class Name{
    String firstname;
    String secondname;
    
    Name(String firstname,String secondname) {
        this.secondname = secondname;
        this.firstname = firstname;
    }
    
    public boolean equals(Name n) {
        return (this.secondname.equals(n.secondname)) && (this.firstname.equals(n.firstname));
        
    }
    public int hashCode() {
        return firstname.hashCode();
    }
}我明白我是重载了方法equals,不是重写,但是我传的参数是我重载的方法,在调用方法后其结果仍为false;

解决方案 »

  1.   

    你是想做对比测试?:        System.out.println(n.equals(m)); true
            System.out.println(n==m); false
      

  2.   

    调用前会被向上转换成Object,你重载的不可见
      

  3.   


    我是想对容器C 内的对象进行删除,当n equals m时候,对c 内的对象n移除,但运行结果是不能移除啊。什么原因。
      

  4.   

    可以删除的,你add的是n,删除m当然不行了,改一下
         Collection c = new HashSet();
            Name n = new Name("ye","dame");
            Name m = new Name("ye","dame");
            c.add(n);
            System.out.println(c.remove(n));
            System.out.println(c);true
    []
      

  5.   

    [code=J]
    avapublic boolean equals(Object o) {
    if(n instanceof Name){
         Name n = (Name)o;
         return (this.secondname.equals(n.secondname)) && (this.firstname.equals(n.firstname));
    }
    return false;
    }
    [/code]
      

  6.   

    调用前会被向上转换成Object,你重载的不可见,所以不调用你写的,会调用Object的equals(Object)方法,而你没重写,remove当然找不到,结果当然不能移除...