instanceof 关键字用于判断某个实例是否是某个类的实例化对象,形如:
String.class instanceof Class
"test" instanceof String
二、isInstance()方法
isInstance是Class类中的方法,也是用于判断某个实例是否是某个类的实例化对象,但是指向则相反。
但这样就带来一个疑问,为什么我们需要这个方法呢,官方文档如此解释:
Determines if the specified Object is assignment-compatible with the object represented by this Class.
This method is the dynamic equivalent of theJava language instanceof operator.
The method returns true if the specified Object argument is non-null
and can be cast to the reference type represented by this Class object without raising a ClassCastException.
It returns false otherwise.
加粗的部分就是主要的区别,主要突出一点:
动态等效(dynamic equivalent)
但是这样并不容易理解,动态等效,虽然字面意思是运行时等效,一个例子会方便理解一些。
•0 instance of String 本身就会报错 String.class.isInstance(0)则可行。
有了这点特性,我们可以在运行时判断两个类是否可以相互强转。
三、示例用法
public static void main(String[] args) {
System.out.println("/"test/" instance of String:"+("test" instanceof String));
System.out.println("/"test/" instance of Object:"+("test" instanceof Object));
System.out.println("/"test/".getClass().isInstance(Object.class):"+("test".getClass().isInstance(Object.class)));
System.out.println("/"test/".getClass().isInstance(String.class):"+("test".getClass().isInstance(String.class)));
System.out.println("String.class.isInstance(Object.class):"+(String.class.isInstance(Object.class)));
System.out.println("String.class.isInstance(String.class):"+(String.class.isInstance(String.class)));
System.out.println("String.class.isInstance(/"test/"):"+(String.class.isInstance("test")));
System.out.println("Object.class.isInstance(/"test/"):"+(Object.class.isInstance("test")));
Object object="ok";
System.out.println("Double.class.isInstance(/"test/"):"+(Double.class.isInstance("test")));
Set<?> a=new HashSet<String>();
Set<String> b=new HashSet<String>();
System.out.println("a is b:"+aIsB(a,b));
}
static boolean aIsB(Object a,Object b){
return a.getClass().isInstance(b);
}
输出:
"test" instance of String:true
"test" instance of Object:true
"test".getClass().isInstance(Object.class):false
"test".getClass().isInstance(String.class):false
String.class.isInstance(Object.class):false
String.class.isInstance(String.class):false
String.class.isInstance("test"):true
Object.class.isInstance("test"):true
Double.class.isInstance("test"):false
a is b:true
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-10/161182.htm