标签:类型判断 instanceof isinstance isassignablefrom
用法: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);*/
用法: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 */
用法: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