类图:
测试类:
public class Test{
public static void main(String[] args){
Timer timer = new Timer();
Man man = new Man();
Son son = new Son();
int count = 100000000;
timer.reset();
for(int i = 0; i < count; i++){
doSomeThing(true);
}
timer.printDrift();//62毫秒
timer.reset();
for(int i = 0; i < count; i++){
doSomeThing(man instanceof IPerson);
}
timer.printDrift();//94毫秒
timer.reset();
for(int i = 0; i < count; i++){
doSomeThing(man instanceof Man);
}
timer.printDrift();//78毫秒
timer.reset();
for(int i = 0; i < count; i++){
doSomeThing(son instanceof Man);
}
timer.printDrift();//94毫秒
timer.reset();
for(int i = 0; i < count; i++){
doSomeThing(man.getClass().isAssignableFrom(IPerson.class));
}
timer.printDrift();//4453毫秒
timer.reset();
for(int i = 0; i < count; i++){
doSomeThing(man.getClass().equals(Man.class));
}
timer.printDrift();//375毫秒
timer.reset();
for(int i = 0; i < count; i++){
doSomeThing(son.getClass().isInstance(man));
}
timer.printDrift();//4093毫秒
}
private static void doSomeThing(boolean bool){
}
}
简单的记录时间漂移的类:
public class Timer{
private long start = 0l;
public void reset(){
start = System.currentTimeMillis();
}
public void printDrift(){
System.out.println(System.currentTimeMillis() - start);
}
}
数据值为在本机上一次测试的输出结果,仅作比较参考。从结果上看直接使用instanceof的效率还是很高的。