默认的equals方法是 ==那么如果我定义了类,里面有很多变量和方法,判断相等时一定要重写equals,在equals里面一个个再写这些东西相等吗?有没有方法可以指定了如果两个对象类型相同,就直接自动地比较对应的各变量和方法的值,然后完全一样就返回true?

解决方案 »

  1.   

    没有,这个需要你自己在equals方法中写的
      

  2.   

        试一下反射,一般来说重写equals是实现比较的两个变量类型相同,并且对象多包含的变量值也相同,java里有很多类都实现了这个方法,比如String,包装类 Date 等,但是要注意重写这个方法的时候一般要重写hashcode()方法,保证equals()返回true时,hashcode()返回true 
      

  3.   

    有,就是你写重写equals后,呵呵
      

  4.   

    hashCode()返回该对象的哈希码值,重写equals()时,一般都要重写hashCode(),在Map里可以提高查找速度
      

  5.   

    public boolean equals(Object obj) {
    if(this.getClass().equals(obj.getClass())){
                         if(判断变量是否相等)
                               return true;
                          return false;
                            方法有必要判断嘛?都是一个类生出来的孩子,方法一定一样的。
                    }
            
                    else 
                        return false;
    }
    要写hashCode的。
      

  6.   

    如果类的类型不一样,好像也可以equals吧,好像书上说是不推荐如果这样的情况下,应该怎么判断方法呢
      

  7.   


    回家看看书吧!!!!!
     我来讲下我的看法: 
       关于equals比较的是值,这种说法是错的,产生这种的错误的原因在于我们平时用equals的时候比较的是string,而string自己重写了equals了!所以很多理所当然的认为equals比较的是内容。 
       而当我们自己写的定义类时,如果自己没有重写equals那么equals  <=> ==是一样,因为object的equals 它的返回值是return this==ojbect(object为你要比较的对象,this当然就是调用equals的对象); 
       我个人认为,equals比较什么是跟据据的情况而定: 
          当我们有个person(id primary key,name,password)表。与之对应的有个Perosn(id,name,password),这个时候,当我们有两个Person对象p1,p2,他们的id相等,这说明这两个Person对象对应表的一个记录!那如果p1.equals(p2)应该为真! 
          在举个例子,当ModFive对象,那么如果modFive1的值为1,modFive2的值为6那么modFive1.equals(modFive2)应该为真! 
        
        总结一下:equals比较什么视情况而定,但注意如果你重写了equals,那么应该重写hashCode!
      

  8.   

    String的equals方法的确是被重写了.一般来说都要自己重写的.否则和==是一样的.
      

  9.   

    因为重写的equals(Object obj)方法的参数是Object
    一半首先使用instanceof来判断一下传入的obj是否和当前类型相同,如果是,才进行内容的比较。
    类型不一样,破坏上面的规则就可以了,不过没有意义。