在java的String类中 使用equals方法的最好与最坏的时候分别是什么?
在此谢谢大家的帮助!

解决方案 »

  1.   


    String类的equals()方法做了重写,表示:
    将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true没有最好和最坏的时候,只有用的最恰当时候
      

  2.   

    去看下hashcode和equals   2个方法,同是比较用的,你就会明白equals  到底如何用了
      

  3.   

    equals方法,只是用来判断对象是否相等,多应该被重写,而且hashcode也应该被重写,不过问道最好与最坏的情况,确实是有些不好回答
      

  4.   

    equals方法比较的是内存地址是否相等,重写equals时hashcode也应该跟着重写,假如定义的对象不能重复,并且有一个主属性时,equals方法就要重写,如果定义的对性可重复,则不用重写,但equals大多被重写,个人认为这与数据库中的表有关系,表一般都有主键,并且不能重复,所以...
      

  5.   

    equal()方法一般是要重写的,用于比较两个对象的内容是否相同~
      

  6.   

        我们都知道在Java规范里定义了equals方法覆盖的5大原则:reflexive(反身性),symmetric(对称性),transitive(传递性),consistent(一致性),non-null(非空性)。那么考察下面的代码: public class Student{
        private String name;
        private int age;
        public Student(String name,int age){
            this.name=name;
            this.age=age;
        }
        public boolean equals(Object obj){
            if(obj instanceof Student){
                Student s=(Student)obj;
                if(s.name.equals(this.name) && s.age==this.age){
                    return true;
                }
            }
            return super.equals(obj);
        }
    }    你认为上面的代码equals方法的覆盖安全吗?表面看起来好像没什么问题,这样写也确实满足了以上的五大原则。但其实这样的覆盖并不很安全,假如 Student类还有一个子类CollegeStudent,如果我拿一个Student对象和一个CollegeStudent对象equals,只要这两个对象有相同的name和age,它们就会被认为相等,但实际上它们是两个不同类型的对象啊。问题就出在instanceof这个运算符上,因为这个运算符是向下兼容的,也就是说一个CollegeStudent对象也被认为是一个Student的实例。怎样去解决这个问题呢?那就只有不用 instanceof运算符,而使用对象的getClass()方法来判断两个对象是否属于同一种类型,例如,将上面的equals()方法修改为:
       public boolean equals(Object obj){
            if(obj.getClass()==Student.class){
                Student s=(Student)obj;
                if(s.name.equals(this.name) && s.age==this.age){
                    return true;
                }
            }
            return super.equals(obj);
        }
      这样才能保证obj对象一定是Student的实例,而不会是Student的任何子类的实例。