1.String
配列
配列について簡単に説明したいと思いますString
。
前に述べたように、配列は任意の型にすることができます。これは、 の配列を作成できることを意味しますString
。「キーボードから 10 行を読み取り、それらを逆順に表示する」プログラムを書きたい場合、コードは次のようになります。
|
Scanner オブジェクト の作成10 要素の配列オブジェクトの作成 0 から 9 までループする キーボードから文字列を読み取り、配列の次のセルに保存する 9 から 0 までループ する 配列内の次のセルを表示する |
コードはほとんど変更されていません! 配列を作成するときに にint
置き換えるだけで済みました。String
さて、キーボードから文字列を読み取るときも、nextInt()
メソッドを に置き換えましたnextLine()
。
2.String
メモリ内の配列
そしてもう一つ有益な事実。3枚の写真を考えてみましょう。
図 1.オブジェクトがメモリ内でどのようにString
配置されるか:
この写真は以前のレッスンで撮ったものです。
文字列のテキストは変数に直接保存されないことに注意してください。別のメモリ ブロックが変数に割り当てられます。変数String
には、テキストを格納するオブジェクトへのアドレス (参照) が格納されます。
図 2.整数配列がメモリ内でどのように配置されるか:
この写真もおなじみですね。
図 3.文字列配列がメモリ内でどのように配置されるか:
左側には、型がString[]
(配列オブジェクトのアドレスを格納する) の配列変数が表示されます。
真ん中にはString
配列オブジェクト自体があります。
そして右側には、テキストを格納する文字列オブジェクトがあります。
配列のセルにはString
文字列自体 (String オブジェクトのテキスト) は格納されません。代わりに、アドレス (アドレスへの参照) を保存します。String
変数が文字列オブジェクトのアドレス (テキストが格納される場所) を格納するのと同じ方法です。
配列セルを比較するときは、次の点を考慮してください。
|
10 個の文字列の配列を作成します。 配列に値を入力します false (参照は等しい) 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"};
GO TO FULL VERSION