instanceof和getClass()的区别

    1. class A { }  
    2.   
    3. class B extends A { }  
    4.   
    5. Object o1 = new A();  
    6. Object o2 = new B();  
    7.   
    8. o1 instanceof A => true  
    9. o1 instanceof B => false  
    10. o2 instanceof A => true // <================ HERE  
    11. o2 instanceof B => true  
    12.   
    13. o1.getClass().equals(A.class) => true  
    14. o1.getClass().equals(B.class) => false  
    15. o2.getClass().equals(A.class) => false // <===============HERE  
    16. o2.getClass().equals(B.class) => true 

 

getClass() will be useful when you want to make sure your instance is NOT a subclass of the class you are comparing with.

一个非常完美的equals方法的写法:

   public boolean equals(Object otherObject)
   {
      // a quick test to see if the objects are identical
      if (this == otherObject) return true;

      // must return false if the explicit parameter is null
      if (otherObject == null) return false;

      // if the classes don't match, they can't be equal
      if (getClass() != otherObject.getClass()) return false;

      // now we know otherObject is a non-null Employee
      Employee other = (Employee) otherObject;

      // test whether the fields have identical values
      return name.equals(other.name) && salary == other.salary && hireDay.equals(other.hireDay);
   }

posted on 2013-04-19 14:57  CVT-wangxin  阅读(165)  评论(0编辑  收藏  举报

导航