标题很忽悠人,其实上就是探讨了一下instance of (包括Class.isInstance, 两者可以看作是等价的不同写法) 和 直接的类型相等判断的差异.
package com.cnsuning.src;
import java.util.*;
public class Main {
public static void main(String[] args) {
Robot robot = new T100();
System.out.println(robot instanceof Robot);
System.out.println(robot instanceof T100);
System.out.println(robot instanceof DolaAMen);
System.out.println(Robot.class.isInstance(robot));
System.out.println(T100.class.isInstance(robot));
System.out.println(DolaAMen.class.isInstance(robot));
System.out.println(robot.getClass());
System.out.println(robot.getClass()==Robot.class);
System.out.println(robot.getClass()==T100.class);
System.out.println(robot.getClass()==DolaAMen.class);
System.out.println(robot.getClass().equals(Robot.class));
System.out.println(robot.getClass().equals(T100.class));
System.out.println(robot.getClass().equals(DolaAMen.class));
}
}
class Robot {
public String toString() {
return "I'm robot";
}
}
class T100 extends Robot {
public String toString() {
return "I'm T100";
}
}
class DolaAMen extends Robot {
public String toString() {
return "I'm DolaAMen";
}
}
程序运行结果:
true
true
false
true
true
false
class com.cnsuning.src.T100
false
true
false
false
true
false
1 instance of和 逻辑运算==都可以用于判断Class相等
2 含义有所区别, instance of会考虑继承关系, 即 B is A, 逻辑运算符不会, 只会简单判断是或否
3 instance of与 Class.isInstance等价