2016-04-05 6 views
0

デザインに関する質問はさておき、現代のJVMで何がより高速に実行されますか?より速いもの:instanceofまたはisInstance?

foo instanceof Bar 

または

Bar.class.isInstance(foo) 

なぜ?

+2

#1。それは言語に組み込まれています。あなたはそれよりも良くなるつもりはありません。 –

+8

速いことはほとんど決して重要ではありません。 – biziclop

+0

@LouisWasserman私はより良くしようとしているわけではありません。 – artspb

答えて

6

Class.isInstanceを使用する必要がありますJVMは固有のものです。これはinstanceofと同じシーケンスにコンパイルされます(HotSpotソースコードの証明:12)。つまり、両方とも性能面で同等です。

1

foo instanceof Barはもっと速くする必要があります。

あなたが持っているクラスをコンパイル時に明確でない場合は、Bar.class.isInstance(foo)を使用できます。 JVMがクラスメソッドを呼び出し、実行時に決定した。このexsampleで

void test(Object o1, Object o2) { 
    o1.getClass().isInstance(o2); 
} 

は、以下の点を考慮します。 instanceofではこれはできません。

ですから、コンパイル時にクラスを知っていればあなたはinstanceof

関連する問題