instanceof 性能

类图:

测试类:

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的效率还是很高的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值