关于equals
问:euqals()函数是用来做什么的?
答:equals()函数可以用来检查一个对象与调用这个equals()的这个对象是否相等。
问:为什么不用“==”运算符来判断两个对象是否相等呢?
答:虽然“==”运算符可以比较两个数据是否相等,但是要来比较对象的话,恐怕达不到预期的结果。就是说,“==”通过是否引用了同一个对象来判断两个对象是否相等,这被称为“引用相等”。这个运算符不能通过比较两个对象的内容来判断它们是不是逻辑上的相等。
问:使用Object类的equals()方法可以用来做什么样的对比?
答:Object类默认的eqauls()函数进行比较的依据是:调用它的对象和传入的对象的引用是否相等。也就是说,默认的equals()进行的是引用比较。如果两个引用是相同的,equals()函数返回true;否则,返回false.
以上来源于http://www.importnew.com/10433.html
对应我这个初学者来说,经常看到书上的equals一会是对象引用的比较,一会是值的比较;偶然间看到http://www.importnew.com/10433.html个人对其理解是未覆盖equals的方法是对对象引用的比较,但覆盖了equals是根据覆盖内容对值进行比较。
数组使用equals:
第一个数组和第二个数组分别进行比较。由于equals()对数组来说比较的仅仅是引用,而不比较内容,所以x.equals(x)返回true(因为自反性——一个对象与它自己相等),但是x.equals(y)返回false。
故可以使用java.util.Arrays 类中声明的 static boolean deepEquals(Object[] a1, Object[] a2) 方法来实现,但不能是基本数据类型,要是对象类型(integer、string等)接下来要将数组传入到deepEquals(),进行值的比较就可以了。