在Java中instanceof
其实是一个二元操作符,和=,
<,
>
这些是类似的,同时它也是被保留的关键字,主要的作用,是为了测试左边的对象,是不是右边的类的实例,返回的是boolean值。
A instance of B
注意:A
是实例,而B
则是Class类
以下是代码测试
interface A{}
class B implements A{
}
class C extends B {
}
public class Test {
public static void main(String[] args){
A a = null;
B b = null;
boolean bool;
System.out.println("----------------------");
bool= a instanceof A;
System.out.println("a instanceof A: " + bool);
bool= b instanceof B;
System.out.println("b instanceof B: " + bool);
System.out.println("----------------------");
a = new B();
b = new B();
bool= a instanceof A;
System.out.println("a instanceof A: " + bool);
bool= a instanceof B;
System.out.println("a instanceof B: " + bool);
bool= b instanceof A;
System.out.println("b instanceof A: " + bool);
bool= b instanceof B;
System.out.println("b instanceof B: " + bool);
System.out.println("----------------------");
B b1 = new C();
bool= b1 instanceof A;
System.out.println("b1 instanceof A: " + bool);
bool= b1 instanceof B;
System.out.println("b1 instanceof B: " + bool);
bool= b1 instanceof C;
System.out.println("b1 instanceof C: " + bool);
}
}
输出结果如下:
---------------------
a instanceof A: false
b instanceof B: false
----------------------
a instanceof A: true
a instanceof B: true
b instanceof A: true
b instanceof B: true
----------------------
b1 instanceof A: true
b1 instanceof B: true
b1 instanceof C: true
从以上结果可以看出,instanceof
相当于判断当前对象能不能装换成为该类型,java
里面上转型是安全的,子类对象可以转换成为父类对象(即父类引用指向子类对象),接口实现类对象可以装换成为接口对象(即接口对象指向实现类)。
instanceof,isInstance区别是什么?
instanceof
判断对象和类型之间的关系,是关键字,只能用于对象实例,判断左边的对象是不是右边的类(包括父类)或者接口(包括父类)的实例化。isInstance(Object o)
:判断对象和类型之间的关系,判断o
是不是调用这个方法的class
(包括父类)或者接口(包括父类)的实例化。
以上就是对instanceof,isInstance的总结