0

Javaで配列がどのように機能するかを理解しようとしています。ソースを調べたところ、コンストラクターがプライベートになっています。それでは、次のように書くとどのように機能しますか。

String [] myArray = new String [10];

角かっこ[]を置くだけで、これが配列であることを認識しますか?

さらに、ArrayListの作成方法などによってインスタンス化されないようにしたのはなぜですか?

ArrayList<String> myArray = new ArrayList<String>(10);

配列はオブジェクトではありませんか?何が違うのですか?

4

5 に答える 5

3

括弧[]?を入れるだけで、これが配列であることを認識します。

はい、そのように動作します。これは、配列を宣言および作成する (およびその要素にアクセスする) ための特別な構文です。

言語 (および JVM) は配列を特別にサポートしています (配列は頻繁に使用されるため)。あなたが見つけた括弧に加えて、特別な for-each-loop 、配列リテラルを作成する構文もあり、配列は vararg メソッドパラメーターに使用できます。

配列はオブジェクトではありませんか?

Java の配列はオブジェクトです (プリミティブ型の配列であっても)。

何が違うのですか?

変わらないものはあまりない

配列を型の変数に割り当てることができることObject(およびそれらを にすることができることnull) を除いて、それらにはあまりオブジェクトのようなものはありません。たとえば、これらには equals や toString などのメソッドがありますが、それらの実装はおそらく期待どおりには動作しません (より有用なバージョンについては、Arrays クラスを参照してください)。また、配列を機能させる内部「クラス」をサブクラス化することもできません。

要約すると、配列はオブジェクトですが、特別なオブジェクトです。他のクラスと同じように構築される ArrayList とは異なります。独自の Collection を Java でロールすることもできますが、独自の配列を構築するには、独自の JVM を構築する必要があります。

于 2013-01-07T06:55:25.063 に答える
0

配列はオブジェクトですが、配列はプリミティブにすることもできますが、プリミティブ配列はオブジェクトのままです。

Furthermore, why did they make it so it isn't instantiated by something like how ArrayList are created?

ArrayListsはジェネリックスを使用して拡張型を許可し、ジェネリックスをプリミティブに使用することはできません。言うまでもなく、ジェネリックはJava 5で提供されましたが、配列は常にここにあります。

于 2013-01-07T06:42:08.897 に答える
0

Java 配列 ( で示されている[]) は、特別な種類のオブジェクトです。とても好きintで友達です。ArrayListsなど、完全な機能を備えたクラスです。多くの違いがあり、通常のクラスのように操作できるように、これらの型をカプセル化するクラスがあります。最も顕著なのは、配列やのような型をサブクラス化できないintことです。しかし、それらをオブジェクト指向で扱いたいArrayListかどうかはわかります。Integer

また、パラメータ化された型であるArrayList<String>記法は、Java に比較的最近追加されたものです (Java 1.5 で登場したと思いますが、間違っている可能性があります)。Objectそれ以前は、コレクションには、適切なクラスにキャストし直さなければならないベアが含まれていました。

于 2013-01-07T06:44:35.350 に答える
0

Arraysサイズが固定されているため (オブジェクトの作成時にサイズを宣言する必要があります)、実行時に配列のサイズを増やすことはできません。

作成時にサイズをArrayList宣言しても、実行時に動的に成長します。

于 2013-01-07T06:38:59.417 に答える
0

角括弧 [ ]? を入れるだけで、これが配列であることを認識します。

はい。

さらに、ArrayList の作成方法などによってインスタンス化されないようにしたのはなぜですか?

(a) 彼らはしなかったし、(b) なぜそうすべきなのか? 答えを知りたいなら、あなたは間違った場所にいます。ジム・ゴズリングに聞いてください。これが同じ方法で行われる言語は他にもたくさんあります。特別な注意を払うために Java を選んだのはなぜですか?

配列はオブジェクトではありませんか?

はい。

何が違うのですか?

[]構文が特別に扱われているという事実は? 無限の数の配列型があるという事実: (プリミティブ型ごとに 1 つ、可能なクラスごとに 1 つ) 回 (1 から Integer.MAX_INT までの任意の数の次元)。

于 2013-01-07T08:59:00.250 に答える