class Router{
   private String ip;
   public boolean equals(Router r){
      return ip.equals(r.ip);
   }
   public Router(String ip){
      this.ip=ip;
   }
   public static void main(String[] args){
      ArrayList<Router> rlist=new ArrayList<Router>();
      Router r1=new Router("192.168.0.1");
      rlist.add(r1);
      Router r2=new Router("192.168.0.1");
      System.out.println(rlist.indexOf(r2));//此处返回值为-1       
   }
}我重写了equals方法,希望是如果Router类的两个对象r1,r2中的ip属性值相同,就认为两个对象是一样的,在rlist中判断出r2已经存在,但返回值总是-1,怎么做才能返回值不为-1呢?谢谢

解决方案 »

  1.   

    你的equals方法是自己的,不是重写Object类的,
      

  2.   


    public boolean equals(Object obj) { return this.ip.equals(((Router)obj).ip);
    }
      

  3.   

    public boolean equals(Object r){
          if(r == null || !(r instanceof Router))
              return false;
          return ip.equals(((Router)r).ip);
    }
      

  4.   


    public boolean equals(Object obj){
    if(this == obj){
    return true;
    }
    if(obj instanceof Router){
    Router anotherRouter = (Router) obj;
    return ip.equals(anotherRouter.ip);
    }
    return false;
    }
      

  5.   

    equals方法错了
    @Override
      public boolean equals(Object obj) {
       // TODO Auto-generated method stub
       if(obj == this){
       return true;
       }
       if(obj == null || obj.getClass() != this.getClass()){
       return false;
       }
       Router router = (Router)obj;
       return this.ip.equals(router.ip);
      }
      

  6.   

    是不是应该先rlist.add(r2)这样啊??