本帖最后由 田啸 于 2012-3-4 20:57 编辑
这里对比下instance of和equals的区别:
instanceof 看一个对象(或称为引用)是否与某类兼容。兼容的有其自身所属的类、所有的父类、实现的所有接口及这些接口的父接口。这样返回为true
Java语言对equals()的要求如下,这些要求是必须遵循的(也是两者的主要区别):
对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。 对于instance of就不一定了: 如果a是b的子类对象 a instanceof b 为true ,但 b instanceof a就是false了,关于下面几点可以自己推敲下.
反射性:x.equals(x)必须返回是“true”。
类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
还有一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。
String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。是进行的内容比较,而已经不再是地址的比较。
|