1、instanceof
用法:a instanceof A,左边的a为对象,右边A为接口名或类名。A为类名时,如果a不是A或A的导出类则编译错误
2、isInstance
用法:A.isInstace(b),A为某个Class对象,右边b为某个对象(b可以为一个Class对象,依然表示b这个对象是不是为A类型的对象)
isInstance和instanceof都考虑继承机构,即子类对象时父类的类型。
3、利用euqals()和==比较不考虑继承机构
interface I1{
}
interface I2{
}
Class Base{
}
Class Derived extends Base{
}
public class Test{
public static void main(String[] args){
Base b = new Base();
Derived der = new Derived();
Class cb = Base.class;
Class cder = Derived.class;
I1 i1 = new A();
A a = new A();
System.out.println(i1 instanceof I2);//左边为对象,右边为接口,不报编译错误
System.out.println(b instanceof Base);
// System.out.println(a instancdof Base);//编译错误,因为a对象与Base没在同一继承结构中
// System.out.println(b instanceof Base.class);//编译错误,instanceof右边应为类名
System.out.println(cder.isInstance(b));
System.out.println(b.getClass() == Derived.class);
System.out.println(der.getClass().equals(cd));
}
}
//output:
//false
//true
//false
//false
//true