编程的时候可能会遇到一个不知道它属于哪个类的对象,我们可以用下列运算符或者方法来判断。

 1、instanceof

instanceof是运算符只被用于对象引用变量,检查左边的被测试对象是不是右边类或接口的实例化。如果被测对象是null值,则测试结果总是false。 String str = new String("测试"); System.out.println(str instanceof String); //输出true。

2、 isInstance(Object obj)

isInstance(Object obj)方法,这个方法与instanceof等价,其中obj是被测试的对象,如果obj是调用这个方法的class或接口的实例,则返回true。 String str = new String("测试"); System.out.println(String.class.isInstance(str)); //输出true。

3、isAssignableFrom

isAssignableFrom(Class cls)方法,如果调用这个方法的class或接口与参数cls表示的类或接口相同,或者是参数cls表示的类或接口的父类,则返回true。 System.out.println(String.class.isAssignableFrom(Object.class)); System.out.println(Object.class.isAssignableFrom(String.class)); //其中第一个输出false,第二个输出true。

4、附件:

Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。  
格式为:
        Class1.isAssignableFrom(Class2)  
  调用者和参数都是java.lang.Class类型。   
  而instanceof是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。  
  格式是:o instanceof TypeName     
  第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。

  1. package com.bill99.pattern;
  2. public class AssignableTest {
  3. public AssignableTest(String name) {
  4. }
  5. /**
  6. * 判断一个类是否是另一个类的父类
  7. * 是打印true
  8. * 否打印false
  9. */
  10. public static void testIsAssignedFrom1() {
  11. System.out.println("String是Object的父类:"+String.class.isAssignableFrom(Object.class));
  12. }
  13. /**
  14. * 判断一个类是否是另一个类的父类
  15. * 是打印true
  16. * 否打印false
  17. */
  18. public static void testIsAssignedFrom2() {
  19. System.out.println("Object是String的父类:"+Object.class.isAssignableFrom(String.class));
  20. }
  21. /**
  22. * 判断一个类是否和另一个类相同
  23. * 是打印true
  24. * 否打印false
  25. */
  26. public static void testIsAssignedFrom3() {
  27. System.out.println("Object和Object相同:"+Object.class.isAssignableFrom(Object.class));
  28. }
  29. /**
  30. * 判断str是否是Object类的实例
  31. * 是打印true
  32. * 否打印false
  33. */
  34. public static void testInstanceOf1() {
  35. String str = new String();
  36. System.out.print("str是Object的实例:");
  37. System.out.println(str instanceof Object);
  38. }
  39. /**
  40. * 判断o是否是Object类的实例
  41. * 是打印true
  42. * 否打印false
  43. */
  44. public static void testInstanceOf2() {
  45. Object o = new Object();
  46. System.out.print("o是Object的实例:");
  47. System.out.println(o instanceof Object);
  48. }
  49. public static void main(String[] args) {
  50. testIsAssignedFrom1();
  51. testIsAssignedFrom2();
  52. testIsAssignedFrom3();
  53. testInstanceOf1();
  54. testInstanceOf2();
  55. }
  56. }

结果:

String是Object的父类:false
Object是String的父类:true
Object和Object相同:true
str是Object的实例:true
o是Object的实例:true

Class.isAssignableFrom(Class clz)与instanceof与Class.isInstance(Object obj) 的区别和联系的更多相关文章

  1. instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系

    instanceof和isInstance(Object obj) 和isAssignableFrom(Class cls)的区别和联系          编程的时候可能会遇到一个不知道它属于哪个类的 ...

  2. instanceOf与isInstance()方法之间的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false.Class类的isInstance(Obje ...

  3. Java instanceof 和 Class.isInstance()区别与应用

    一.instanceof 关键字 instanceof 关键字用于判断某个实例是否是某个类的实例化对象,形如: String.class instanceof Class "test&quo ...

  4. Class.isAssignableFrom(Class clz)方法 与 instanceof 关键字的区别

    Class.isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口.   格式为:        Class1.isAssignable ...

  5. JavaScript中instanceof与typeof运算符的用法及区别详细解析

    JavaScript中的instanceof和typeof常被用来判断一个变量是什么类型的(实例),但它们的使用还是有区别的: typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typ ...

  6. JS四种判断数据类型的方法:typeof、instanceof、constructor、Object.prototype.toString.call()

    1.typeof 1 console.log(typeof ""); //string 2 console.log(typeof 1); //number 3 console.lo ...

  7. JavaScript instanceof深度剖析以及Object.prototype.toString.call()使用

    本文由segementfalt上的一道instanceof题引出: var str = new String("hello world"); console.log(str ins ...

  8. Vue 犯罪指南:TypeError: Right-hand side of 'instanceof' is not an object

    背景:在迁移项目从 Vue1.x 到 Vue2.x 时,改动没有过脑子,导致翻车.

  9. VUE Right-hand side of ‘instanceof’ is not an object 解决方案

    这里要注意一下, props之前没注意写成了   props: {     wrd: '',       sname:'zs'   },   这样是不能被解析成object的,所以一定要写的更具体一点 ...

随机推荐

  1. SQLite3 学习笔记

    1.数据存储方式 Plist(NSArray\NSDictionary) Preference(偏好设置\NSUserDefaults) NSCoding(NSKeyedArchiver\NSkeye ...

  2. AS技巧合集「常用技巧篇」

    转载:http://www.apkbus.com/forum.php?mod=viewthread&tid=254723&extra=page%3D2%26filter%3Dautho ...

  3. java项目的划分方式:模块优先还是层优先?

    I've seen and had lots of discussion about "package by layer" vs "package by feature& ...

  4. hadoop报错:WARN mapred.JobClient: Error reading task outputNo route to host

    解决方案: /etc/sysconfig/network/etc/hosts$hostname 这三处的主机名都要一样. 具体参考:http://blog.itpub.net/28254374/vie ...

  5. 【BZOJ-1911】特别行动队 DP + 斜率优化

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3478  Solved: 1586[Submit][Statu ...

  6. HDU2222 Keywords Search

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  7. Discuz! X2.5 /source/class/helper/helper_seo.php Remote Code Execution Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 SEO模块中的preg_replace+修正符e+双引号引发的远程代码执 ...

  8. MVC5-6 帮助类

    视图帮助类 HtmlHelper HtmlHelper给我们封装了大量的常用方法,使我们的开发更具高效.那么其中有哪里是我们常用的呢? BingForm 生成form表单 上图简单的使用了Html.B ...

  9. WinForm------TreeList加载数据方法

    1.SQLService操作 (1)在SQLServer创建一张表dbo.Department (2)写入以下数据 2.VS操作(这里如何使用EntityFramework加载数据库就不多说了哈) ( ...

  10. 半透明状态栏(适用于搜索等)CSS样式

    .search-{ -webkit-box-flex: ; -moz-box-flex:; text-align: left; font-size:14px; line-height:22px; he ...