1. メモリ内の配列

前の例では、図は少し不正確でした。

配列を作成する場合 (文字列を作成する場合と同様)、メモリの 2 つの別個のブロックが割り当てられます。1 つは配列(コンテナー) 自体を格納するためのブロックで、もう 1 つはそのアドレスを格納する変数用のブロックです。以下の図は、この説明を表しています。

メモリ内の配列

10 int要素の配列と配列のアドレスint[]を格納する変数に割り当てられたメモリは、緑色で表示されます。int

比較のため、int値を格納する通常の変数199を青色で示しています。

これは、文字列をメモリに保存することを少し思い出させます。

そうです、文字列です。文字列を扱うときと同じように、配列変数を相互に割り当てることができます。

コード 説明
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
要素の配列を作成します10 int。Index を使用してセルに
値を割り当てます。Index を使用してセルに 値を割り当てます。 変数には、変数に格納されているアドレスを保存します。 ここで、メモリ内の同じ配列オブジェクトを指します。 配列オブジェクトの Index を持つセルに、 ( value を格納する) セルと(value を格納する)セルに格納されている値の合計を書き込みます。 42
97
ba
ab
92479

配列オブジェクトは元の場所に残り、 変数ab変数は同じオブジェクトへの同じアドレス (参照) を格納します。写真を見てください:

メモリ内の配列 2

2. 配列の操作に関する詳細

あらゆるタイプの要素の配列を作成できます。これを行うには、タイプ名の後に角括弧を書き込むだけです。一般に、配列の作成は次のようになります。

type[] name = new type[number];

ここで、type は配列に格納する要素のタイプです。Name は配列を参照するために使用する変数の名前で、numberは配列内のセルの数です。

上の例は、配列変数と配列オブジェクトを作成するための標準形式です。実際には、これらは 2 つの別個のエンティティです。

配列オブジェクトとは別に配列変数を作成できます。

type[] name;
name = new type[number];

そして、重要ではないもう 1 つのポイント:

変数または式全体をインデックス配列および配列要素の数として使用できます。

例:

コード 説明
int n = 100;
int[] a = new int[n];
n要素の配列を作成する
int n = 100;
int[] a = new int[n * 2 + 3];
203要素を含む配列を作成する
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
重要:
ところで、配列に存在しないインデックス (この例では、 range にない整数を意味します) を使用して配列セルにアクセスしようとすると、プログラムがクラッシュすることに注意してください0..99ArrayIndexOfBoundExceptionこれは、インデックスが配列の範囲外にあったことを意味します。

3. 配列の長さ

前の例で見たように、配列変数を単独で作成し、後でコード内のどこかでそれに値 (配列オブジェクトへの参照) を割り当てることができます。こんなこともできます:

コード 説明
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
型の配列変数を作成します。変数が より小さいint[]
場合は、要素 の配列を作成します。 それ以外の場合は要素 の配列を作成しますa10
10

20

さて、このような配列を使って他に何ができるでしょうか? 含まれている要素の数をどうやって知ることができますか?

これを支援するために、配列には という名前の特別なプロパティ (変数) がありますlength。次の式を使用して配列の長さを見つけることができます。

array.length;

これはarray配列変数の名前であり、lengthは配列のプロパティの名前です。プロパティの値はlength変更できません。lengthプロパティ自体を他の変数に割り当てることはできますが、何も割り当てることはできません (これを行おうとすると、プログラムはコンパイルできなくなります)。

次のように前の例を続けることができます。

コード 説明
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
型の配列変数を作成します。変数が より小さいint[]
場合は、要素 の配列を作成します。 それ以外の場合は、要素 の配列を作成します。 配列のすべての要素をループします: fromから lengtha10
10

20
0array.length - 1

4. Java の配列に関する事実の要約

配列についてわかっていることをまとめてみましょう。

事実 1.配列は多数のセルで構成されます。

事実 2.特定のセルには、その番号 (インデックス) を使用してアクセスします。

事実 3.すべての細胞は同じ種類です。

事実 4.すべてのセルの初期値は、0 (セルが数値を格納する場合)、null(セルがオブジェクト参照を格納する場合)、またはfalse(セルがboolean値を格納する場合) です。この章では、デフォルト値について詳しく説明します

事実 5. は String[] list単なる変数の宣言です。これはコンテナ (配列オブジェクト) 自体を作成しません。変数を使用するには、まず配列 (コンテナー) を作成し、それを変数に割り当てる必要があります。以下の例を参照してください。

事実 6.配列オブジェクト (コンテナ) を作成するときは、そのオブジェクトの大きさ、つまり含まれるセルの数を指定する必要があります。これは次のようなステートメントで行われますnew TypeName[n]

事実 7.配列の長さは.lengthプロパティを使用して見つけることができます。

事実 8.配列を作成した後は、その要素の型や格納する要素の数を変更することはできません。

コード 説明
String s;
String[] list;
sですnull
list_null
list = new String[10];
int n = list.length;
このlist変数には、オブジェクトへの参照、つまり10要素で構成される文字列配列が格納されます。
n10
list = new String[0];

list要素の配列を参照するようになりました0。配列は存在しますが、要素を格納できません。

list = null;
System.out.println(list[1]);
例外 (プログラム エラー) がスローされます。つまり、プログラムがクラッシュします。listへの参照を保存しますnull
list = new String[10];
System.out.println(list[10]);
配列範囲外例外(プログラムエラー)が発生します。
が要素/セルlistを格納する場合10、有効なインデックスは次のとおりです。0 1 2 3 4 5 6 7 8 910要素。