instanceof と Class#isInstance
動的に使える以外に違いはないわけだけど、isInstanceもたまには思い出してあげてください。
boolean isHoge = (obj instanceof Hoge);
boolean isHoge = Hoge.class.isInstance(obj);
これらは等価なわけです。
でも、SJCちっくな問題を2つほど解いてみましょう。
Q1.isInteger はどうなるか?
int num = 10; boolean isInteger = (num instanceof Integer);
1. true
2. false
3. コンパイルエラー
4. 実行時例外
Q2.isInteger はどうなるか?
int num = 10; boolean isInteger = Integer.class.isInstance(num);
1. true
2. false
3. コンパイルエラー
4. 実行時例外