このコードをコンパイルして実行すると、次のようになります。
public class Testing {
public static void main(String... args) {
Object obj = null;
if (obj instanceof Object) {
System.out.println("returned true");
} else {
System.out.println("returned false");
}
System.out.println(" " + obj instanceof Object);
}
}
私はこれをコマンドラインで取得します:
C:\Users\xxxxxx\Desktop>Java Testing
returned false
true
「nullinstanceofsomeType」は常にfalseを返すべきではありませんか?
この:
" " + obj instanceof Object
次のように評価されます:
(" " + obj ) instanceof Object
および" " + obj
は確かに、Object
のインスタンスであるnull以外の文字列です。
In( "" + obj)は最初に評価される部分なので、括弧の後にnullはなくなります。つまり、これはObjectのインスタンスです。
コンセプトが明確になるように、以下のリンクも参照してください。
http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/op2.html
最後のSystem.out.println
では、" " + obj
が最初に評価され、結果であるString
がinstanceof Object
についてチェックされ、結果が出力されます。