我在接受采访时被问到这个问题。不计算执行方法体所需的时间。 有任何想法吗?
答案 0 :(得分:8)
我对这个问题的回答是“我不在乎”。如果我在编写应用程序时遇到问题并且我怀疑instanceof
是原因,那么我会想知道它是否真的 原因,但我不会只需要在“预感”上重写大块代码。
答案 1 :(得分:6)
我想对其进行分析以量化差异,但我猜instanceof
更快。
考虑一下...... booleanReturnMethod()
是一个实例方法(如果它是静态的,你已经知道了这个类),所以方法调度的第一步是确定它是什么类的对象。那就像instanceof
那样。
但是必须找到实际的方法体,并且必须设置调用。即使您对方法体本身进行折扣,该准备也需要一些额外的时间。
答案 2 :(得分:2)
首先,我猜测方法调用,但只是一个头发,因为确定类实例关系实际上相当复杂,不仅涉及完整的类名,还涉及加载它的类加载器。
其次,测量并查看目标硬件和JVM,然后准备好使用下一个JVM版本更改结果。
第三,除非你打算设计一个从根本上依赖于以非常高的速率检查实例的架构,否则他会关心谁。在任何合理复杂的系统中,这甚至不会成为一个因素...但这只是我的2美分,而且我通常非常倾向于考虑特定编码风格的表现。
第四,方法调用样式通常比检查类型更好的OO,但是必须在上下文中看到系统以确保它是这样。
答案 3 :(得分:1)
我真的不明白这个问题......所以面试你的人想知道你是否知道关键字instanceof是否比调用随机方法更快?首先,我要说因为它是一个关键字,所以我认为JVM的问题比你声明的方法要少。但后来我会说我并不在乎,因为我真的不想依赖于instanceof而且我只是在被迫时才使用它。我的意思是,如果我必须制作一段代码,我依赖于“if T instanceof Z else ......”那么我真的花一两分钟来思考我是否做错了。