像compareTo()方法的重写是为了排序方便,而重写equals()方法有什么用处呢?

解决方案 »

  1.   

    假设String类没有实现equals()方法的话
    那么
    String a = "abc";
    String b = new String("abc");a.equals(b)将调用Object.equals()方法。
    Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 
    所以a.equals(b)会返回false。那么很多地方比如根据用户输入的字符串去做判断,都不能直接使用equals方法了。
      

  2.   

    因为Object类的equals方法比较的是引用,不是引用的内容。
      

  3.   

    因为每个子类可能它们认为的相同的点是不一样的
    比如,字符串的equals只要它们的内容相同就可以equals了
    而别的类可能会有其它的比较点,所以这就要各自的子类来实现了
    如果不重写,那就是使用Object类的 equals方法,它就是直接比较引用了
      

  4.   

    Object类提供的equals方法只是一个很简单的,不能适应应用程序有特殊要求的情况。
    比如网络对象,带有volatile属性的对象,或是带有多层子对象的复合对象,等等,是不能像String一类的对象进行简单比较的,所以提供了这样一个机制,就像serializable接口一样,既有默认的序列化方法,也提供了程序自己定制,覆盖默认方式的可能性。
    Object仅仅提供了一个对引用的比较,如果两个引用不是同一个那就返回false,这是无法满足大多数对象比较的需要的,所以要覆盖。
      

  5.   

    谢谢你们
    我上面说的是一般类,String类是的实现源码我也看了,也知道程序员们习惯于用equals()比较对象的值
    这样说吧:
    当我们定义一个类时,在什么情况下,我会去考虑重写equals()方法呢
      

  6.   


        public boolean equals(Object obj) {
    return (this == obj);
        }这个是java中object的equals方法,它只是简单的判断2个对象是否指向
    同一内存地址,如果是指向同一个内存地址,这两个对象其实就是同一个对象;而我们很多时候想要的是:
       不管这两个对象是否指向同一个对象,只要他们的内容相同,就应该通过equals方法返回一个true
    值来
    例如:String str1 = new String("123");
    String str2 = new String("123");str1和str2指向不同的物理地址,是不同的对象。这时我们只是关心它们的字面内容
    是否相同,这时它们的字面内容都为"123",我们希望equals方法能返回一个true,
    鉴于以上,不重写equals方法是不行的;
      

  7.   

    当我们定义一个类时,在什么情况下,我会去考虑重写equals()方法呢当你觉得需要为该类的对象提供一个比较方法的时候。比如你有一个类,类里有2个属性字段:class A{
    String str1 ;
    int i;

    //省略
    }你希望该类的对象只要这2个属性字段分别相等,就通过equals()返回1个true,
    此时你就要重写equals()方法:class A{
    String str1 ;
    int i;

    boolean equals(A src){
    return this.str1.equals(src.str1)&&this.i==src.i;
    }
    }