クラス判定

あるオブジェクトがあるクラスのインスタンスかどうかって調べたいことは、良くあると思うが、
さっきコード書いてて急に気になったので性能を調べた。(ほかにすることあるだろ)

JDK1.4,Win2K,P4 2Gぐらい

// instanceof 派生クラスでもOK
isConst =(o instanceof ConstTerm);
// DOMのNode判定風を作ったとして(識別子はshortで) 同一クラス
isConst =(o.getType() == ConstTerm.TYPE_CONST);
// class比較 同一クラス
isConst =(o.getClass() == ConstTerm.class);
// その2 
isConst =(o.getClass().equals(ConstTerm.class));
// 派生クラスもOK  あれ逆だっけ?
isConst =(o.getClass().isAssignableFrom(ConstTerm.class));

この順に速く、1:1.2:1.5:8:24 ぐらい。
3つ目と4つ目ってClass,Objectのequalsのソースを見る限り同じことをしているように見えるがかなり違う。
まあ、そうは言うても、ループ1億回の合計時間で最初の方法だと0.5秒。なんかどれを使おうとも他のロジックやらIOやらでの時間の方が食うな。
最近、こういう地味な部分の性能向上のこともやっていたが、それよりは、もっと時間くうところを早めるべきなんでしょうなあ。