web-dev-qa-db-ja.com

Java --null instanceofObjectはtrueとfalseの両方に評価されます

このコードをコンパイルして実行すると、次のようになります。

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を返すべきではありませんか?

51
Infiniteh

この:

" " + obj instanceof Object

次のように評価されます:

(" " + obj ) instanceof Object

および" " + objは確かに、Objectのインスタンスであるnull以外の文字列です。

103
MByD

In( "" + obj)は最初に評価される部分なので、括弧の後にnullはなくなります。つまり、これはObjectのインスタンスです。

コンセプトが明確になるように、以下のリンクも参照してください。

http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/op2.html

2
mevada.yogesh

最後のSystem.out.printlnでは、" " + objが最初に評価され、結果であるStringinstanceof Objectについてチェックされ、結果が出力されます。

2
Dan D.