class.isassignablefrom(class clz)方法 与 instanceof

isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。
通常调用格式是
Class1.isAssignableFrom(Class2)
调用者和参数都是 java.lang.Class 类型。

这个方法在如下情况下返回true
1.class1跟class2是同一类型 则返回true
2.class1是class2的超类或超接口 则返回true

如:Object.class.isAssignableFrom(String.class) Object是String的超类 所以返回true
String.class.isAssignableFrom(String.class) 返回true


而 instanceof 是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。
格式是: oo instanceof TypeName
第一个参数是对象实例名,第二个参数是具体的类名或接口名

具体例子如下:

java 代码
  1. packagetest;
  2. publicclassTest2{
  3. publicvoidtestIsAssignedFrom1()
  4. {
  5. System.out.println(String.class.isAssignableFrom(Object.class));
  6. }
  7. publicvoidtestIsAssignedFrom2()
  8. {
  9. System.out.println(Object.class.isAssignableFrom(Object.class));
  10. }
  11. publicvoidtestIsAssignedFrom3()
  12. {
  13. System.out.println(Object.class.isAssignableFrom(String.class));
  14. }
  15. publicvoidtestInstanceOf1()
  16. {
  17. Stringss="";
  18. System.out.println(ssinstanceofObject);
  19. }
  20. publicvoidtestInstanceOf2()
  21. {
  22. Objecto=newObject();
  23. System.out.println(oinstanceofObject);
  24. }
  25. publicstaticvoidmain(String[]args){
  26. Test2test=newTest2();
  27. test.testIsAssignedFrom1();
  28. test.testIsAssignedFrom2();
  29. test.testIsAssignedFrom3();
  30. test.testInstanceOf1();
  31. test.testInstanceOf2();
  32. }
  33. }
  34. 打印结果为:
  35. false
  36. true
  37. true
  38. true
  39. true

你可能感兴趣的:(instanceof)