1

これはどういうわけか、 「プリミティブ型をサブクラス化/スーパークラス化するものはありますか?」と尋ねるのと同じです。

(((Object) (new String[6])) instanceof Object[]が真であるため、 のようにString extends Object。)

たとえば、Java の中で唯一真であるint[]ということはありますか? ((Object) (new int[3])) instanceof int[]

もしそうなら、

((Object) (new int[3])) instanceof int[]

と同じです

((Object) (new int[3])).getClass() == int[].class

すべての型/クラスの継承をチェックする必要がないため、後者の方が高速であるはずです。

4

3 に答える 3

1

(A instanceof B) は、A が B である場合、または B が期待される場所で A を使用できる場合に true を返します。
== を使用したクラス オブジェクトまたはクラス名の比較では、同一性が比較されます。A と B がまったく同じ型であることを知る必要がある場合は、A.getClass() == B.getClass() を使用できます。プリミティブ型は Object から継承しませんが、配列は継承します。たとえば、次のように言えます。

if(new int[2] instanceof Object)

だがしかし

if(new int[2] instanceof Object[])

後者はコンパイルされません。

オブジェクト指向プログラミングでは、通常、正確な型よりも等価性を重視します。ほとんどの場合、(== を使用して) ID をテストするのではなく、(instanceof を使用して) 適合性をテストする必要があると私は主張します。
Object へのキャストは必要ないことに注意してください。

if(new String[2] instanceof Object[])
    System.out.println("true");
于 2013-08-09T01:43:27.690 に答える