equals()到底是比较什么
equals()比较的到底是对象的引用是否指向同一内存地址,还是比较的对象的值是否相同
equals()比较的到底是对象的引用是否指向同一内存地址,还是比较的对象的值是否相同
2015-09-23
那要看调用equals()方法的对象所对应的类 里的equals方法是怎么写的了。
举个例子。
一般的类没有重写Object类的equals()方法,比如你随便定义一个类Student,那么当我Student t = new Student();t.equals(??)这里就会调用父类的equals()方法。Object类里的equals方法比较的是地址,所以我写的这个类比较的也是地址。
而有些类为了一些使用上的方便合理,于是便重写了equals()方法。比如String类,当我们使用字符串时,当他们内容相同时,我们会认为他们没有什么不同,我们希望两个内容一致的String对象用equals()比较会返回true。而String类中的equals()方法正是这样重写的,只要内容相等,A.equals(B)就是true,在String的对象调用equals()方法时,就是比较内容。
当然,我们也可以自己去重写equals()方法,从而让我们自己写的类达到自己的期望。比如说,依然是一个Student类,我现在希望说如果两个Student姓名,学号相同,我就认为他们是一样的。我就可以重写equals()方法,如果两个对象的id、name全相等,那么就返回true,否则返回false。
所以记住Object类里的equals()方法比较的就是地址,而所有的类都直接或间接继承自Object,这些子类的equals()方法是比较什么,就看他们是如何重写equals()的。重写equals()最典型的例子就是String类了。
举报