1

私はJava1.3を使用しています。これは、プリミティブのオートボクシングがないことを意味します。これは、次のコードを意味します。

Vector v = new Vector();
byte b = (byte) 4;

v.addElement(b);

コンパイラエラーでコンパイルされません:

The method addElement(Object) in the type Vector is not applicable for the arguments (byte)

次のように、すべてのプリミティブをラップする必要があります。

v.addElement(new Byte(b));

そうは言っても、このコードは正常にコンパイルおよび実行されることに気づきました。

Vector v = new Vector();
byte[] b = new byte[]{1, 2};

v.addElement(b);

そんなことがあるものか?私のバージョンのJavaにはコレクションすらありません。このドキュメントには、メソッドがオーバーロードされておらず、オブジェクトのみが必要であると記載されています。

プリミティブの配列でさえ、すべての配列が実際にオブジェクトを拡張するのは事実ですか?

4

4 に答える 4

9

ご想像のとおり、プリミティブのみを含む配列であっても、すべての配列はObjects です。これらは参照型であり、Java を単純化してすべての参照型をObject.

ある意味では、配列は含まれる型に関係なく同じように動作します。「プリミティブ」であることは、コンテナーのプロパティではなく、型のプロパティです。

于 2012-08-25T20:42:09.340 に答える
2

プリミティブ型の配列を含むすべての配列は次のObjectsとおりです。

int intArray[] = new int[5];

if (intArray instanceof Object)
    System.out.println("array is Object");
else System.out.println("array not Object");

出力:

array is Object
于 2012-08-25T20:42:33.407 に答える
2

はい。 Arrays はObjects です。

Java言語仕様の§4.3.1から:

オブジェクトは、クラス インスタンスまたは配列です。

于 2012-08-25T20:43:27.650 に答える
1

プリミティブの配列であっても、すべての配列が実際にオブジェクトを拡張する場合

はい。

于 2012-08-25T20:42:28.733 に答える