哪个是更快的obj instanceof类或obj.booleanAnyMethod()

fas*_*ava 1 java algorithm

我在接受采访时被问到这个问题.不计算执行方法体所需的时间.有任何想法吗?

Dea*_*ing 8

我对这个问题的回答是"我不在乎".如果我正在编写一个我正在编写的应用程序有问题并且我怀疑instanceof是原因,那么我会查看它是否真的原因,但我不会通过重写大量的代码"直觉".

  • 当我在一次采访中提出技术问题时,我并不是在寻找诸如"过早优化是所有邪恶的根源"这样的老生常谈.我确实要求他们看看程序员是否知道"引擎盖下的工作原理".只有当事情不能像宣传的那样工作时,那些关心并且懒得发现内幕的程序员才能修复错误. (2认同)

eri*_*son 6

我想对其进行分析以量化差异,但我猜想instanceof会更快.

想一想...... booleanReturnMethod()是一个实例方法(如果它是静态的,你已经知道了这个类),所以方法调度的第一步是确定它是什么类的对象.那就像是在instanceof那里.

但是必须找到实际的方法体,并且必须设置调用.即使您对方法体本身进行折扣,该准备也需要一些额外的时间.

  • @josefx - 在像Java这样的静态语言中调用方法并不像查看目标中是否存在具有匹配签名的方法那么简单.还咨询了类型信息; 实际上,如果目标中存在正确的方法签名,但已修改了限定类型以删除方法声明,则仍会引发"NoSuchMethodError".类型信息还控制Java中的可访问性. (2认同)