1.String配列

配列について簡単に説明したいと思いますString

前に述べたように、配列は任意の型にすることができます。これは、 の配列を作成できることを意味しますString。「キーボードから 10 行を読み取り、それらを逆順に表示する」プログラムを書きたい場合、コードは次のようになります。

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
Scannerオブジェクト の作成
10 要素の配列オブジェクトの作成
0 から 9 までループする

キーボードから文字列を読み取り、配列の次のセルに保存する
9 から 0 までループ

する 配列内の次のセルを表示する

コードはほとんど変更されていません! 配列を作成するときに にint置き換えるだけで済みました。Stringさて、キーボードから文字列を読み取るときも、nextInt()メソッドを に置き換えましたnextLine()


2.Stringメモリ内の配列

そしてもう一つ有益な事実。3枚の写真を考えてみましょう。

図 1.オブジェクトがメモリ内でどのようにString配置されるか:

メモリ内の文字列配列

この写真は以前のレッスンで撮ったものです。

文字列のテキストは変数に直接保存されないことに注意してください。別のメモリ ブロックが変数に割り当てられます。変数Stringには、テキストを格納するオブジェクトへのアドレス (参照) が格納されます。

図 2.整数配列がメモリ内でどのように配置されるか:

メモリ2の文字列配列

この写真もおなじみですね。

図 3.文字列配列がメモリ内でどのように配置されるか:

String 配列がメモリ内でどのように配置されるか

左側には、型がString[](配列オブジェクトのアドレスを格納する) の配列変数が表示されます。

真ん中にはString配列オブジェクト自体があります。

そして右側には、テキストを格納する文字列オブジェクトがあります。

配列のセルにはString文字列自体 (String オブジェクトのテキスト) は格納されません。代わりに、アドレス (アドレスへの参照) を保存します。String変数が文字列オブジェクトのアドレス (テキストが格納される場所) を格納するのと同じ方法です。

配列セルを比較するときは、次の点を考慮してください

String[] array = new String[10];

array[1] = "Hello";
array[2] = array[1];
array[3] = new String("Hello");
// Compare
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
10 個の文字列の配列を作成します。

配列に値を入力します



true (参照は等しい)
false (参照は等しくありません)
true (文字列は等しい)
true(文字列は等しいままです)


3. Java での高速配列初期化

配列は非常に便利なので、Java の作成者は配列をできるだけ便利に扱えるようにしようとしました。

彼らが最初に行ったのは、配列の初期化、つまり配列の初期値を指定するプロセスを簡素化することでした。

結局のところ、プログラムが動作するには、どこかから読み取られたデータに加えて、独自の内部データも必要になることがよくあります。たとえば、各月の長さを配列に保存する必要があるとします。コードは次のようになります。

int[] months = new int[12];
months[0] = 31; // January
months[1] = 28; // February
months[2] = 31; // March
months[3] = 30; // April
months[4] = 31; // May
months[5] = 30; // June
months[6] = 31; // July
months[7] = 31; // August
months[8] = 30; // September
months[9] = 31; // October
months[10] = 30; // November
months[11] = 31; // December

しかし、Java の作成者のおかげで、これをより簡潔に記述する方法があります。

// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

配列のすべての値をカンマで区切って単純にリストすることができます。

便利ですよね?しかし、それだけではありません。

偶然ですが、コンパイラは配列の値の型に基づいてコンテナ (配列オブジェクト) の型を決定できます。また、配列の長さを決定するには、中括弧内に記述された要素の数を数えるのは簡単です。

つまり、このコードはさらに短く書くことができます。

// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

美しいものですね。🙂

これは「高速配列初期化」と呼ばれます。ちなみに、これは他のタイプでも機能しますint...

// Names of months of the year
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November ", "December"};