码迷,mamicode.com
首页 > 其他好文 > 详细

【集腋成裘】类型判断(instanceof、isInstance、isAssignableFrom)

时间:2015-08-02 10:17:57      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:类型判断   instanceof   isinstance   isassignablefrom   

一、instanceof

    用法:boolean 对象 instanceof 类型

    解释:用于判断某一个对象是否是该类型的实例,除了8个基本数据类型,任何对象instanceof Object都为true,同理,子类对象instanceof 父类/接口也为true。

    注意1:该方法为静态运算符,即在编译器就做类型检查,区别于class.isInstance(Object obj)的运行时。

    举例:

String strObj = "str object";
Integer intObj = 5;
boolean isStrObj = strObj instanceof String;
/*编译器会做类型检查,下面这句编译错误,过不了
boolean isStrObj2 = intObj instanceof String;*/
System.out.println(isStrObj);
/**
 * output: true
 */

    注意2:该方法不支持基本数据类型的判断。以下语句编译是不通过的。

/*int num = 2;
  System.out.println(num instanceof Integer);*/


二、Class.isInstance(Object obj)

    用法:boolean class.isInstance(Object obj)

    解释:和instanceof运算符表达的语义一致,但是该方法是动态运行时判断,而非编译期判断。

    示例:

String strObj = "str object";
Integer intObj = 3;
boolean ret = String.class.isInstance(strObj);
boolean ret2 = String.class.isInstance(intObj);
System.out.println(ret +": "+ ret2);
/**
 * output: true: false
 * 注意:ret2编译通过,因为isInstance作用于运行时
 */

    注意:该方法也不支持基本数据类型的判断,因为会自动转成包装类进行比较。

boolean ret = int.class.isInstance(3);
boolean ret2 = Integer.class.isInstance(3);
System.out.println(ret +": "+ ret2);
/**
 * output: false: true
 */


三、Class.isAssignableFrom(Class<?> clazz)

    用法:boolean  class.isAssignableFrom(Class<?> clazz)

    解释:calss是否与参数clazz相同,或class是clazz的父类或接口。

    示例:

/**
* 实际关系:java.sql.Date extends java.util.Date
*/
boolean ret = java.sql.Date.class.isAssignableFrom(java.util.Date.class);
boolean ret2 = java.util.Date.class.isAssignableFrom(java.sql.Date.class);
System.out.println(ret+": "+ ret2);
/**
 * output: false: true
 */

    注意:关于基本数据类型的判断,int.class.isAssignableFrom(int.class)返回为ture,不过这样用起来太鸡肋了,没有太多实际意义。


附注:

    本文如有错漏,烦请不吝指正,谢谢!



版权声明:本文为博主原创文章,未经博主允许不得转载。

【集腋成裘】类型判断(instanceof、isInstance、isAssignableFrom)

标签:类型判断   instanceof   isinstance   isassignablefrom   

原文地址:http://blog.csdn.net/reliveit/article/details/47204351

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!