Previous | Next | Trail Map | Writing Java Programs | Java 言語のナットとボルト


配列と文字列

他のプログラム言語のように、 Java では配列オブジェクトを通して多数の値をまとめて管理する ことができる。 同じく、 String オブジェクトによって多数の文字で構成されたデータを管理で きる。

配列

文字を数えるプログラム例は、( main() メソッドへのパラメータとして)配列 を宣言するが、決してそれを使用しない。 この節では、Java プログラムで配列を作成し、利用す るために必要な知識を紹介する。

他の変数のように、配列を使用する前に最初に宣言しなくてはならない。 また、他の変数のように 、配列の宣言には、配列の型と配列の名前の 2 つの主要な構成要素がある。 配列の型には、配列 内の要素のデータ型が含まれる。 例えば、すべての整数要素を含んだ配列のデータ型は整数の配列 である。 一般的な配列は持つことができない。つまり、その要素のデータ型は、配列が宣言される時に特定 されなくてはならない。 次のような整数の配列の宣言がある。

int arrayOfInts[];

宣言の[] arrayOfInts が配列であることを表す。 宣言の int arrayOfInts に含 まれる要素がすべて整数であることを表す。 前の宣言は arrayOfInts が整数の 配列であることを表している。 宣言は配列要素を含むためにメモリを割り当てない。

メモリを割り当てられる 前に arrayOfInts の要素に値を代入したりアクセスしようとすると、コンパイラは次のようなエラーをプリントし、プログラムのコンパイルを拒否する。

testing.java:64 : Variable array OfInts may not have been initialized.

配列の要素にメモリを割り当てるには、配列をインスタンス化しなくてはならない。 Java の new の演算子を使用してこれを行う。 (実際に、配列を作成するステッ プは、クラスからオブジェクトを作成するステップに類似している(宣言、インスタンス化、初期化)。 オブジェクト、クラス、インタフェース でオブ ジェクトの作成についてさらに学習することができる。 (特に、 オブジェクトの作成 ページを見なさい。)

次の文は arrayOfInts に 10 の整数要素を含むために十分なメモリを割り当て る。

int arrayOfInts[] = new int[10]

一般に配列を作成するときは、new、配列要素のデータ型、角括弧('[' と ']')内に希望の要素の数を使用する。
elementType arrayName[] = new
elementType[arraySize]

配列にメモリが割り当てられたので、値をその要素に代入し、それらの値を検索することができる。
for (int j = 0; j
 < arrayOfInts.length; j ++) {
    arrayOfInts[j] = j;


    System.out.println("[j] = " + arrayOfInts[j]);
}
例からわかるように、配列の要素を参照するには、配列名に角括弧を付加する。 角括弧の 間にアクセスしたい要素のインデックスを示す(変数や他の式があってもよい)。 Java では、配 列のインデックスは 0 で始まり、配列の長さマイナス1で終了することに注意しなさい。

上記のコード例にもう1つの面白い要素がある for ループで、array OfInts の各要素に値を代入し、それらの値をプリントすることを繰り返している。 配列。 length で現在の長さを検索する arrayOfInts.length の使用が、すべての Java 配列に提供されるプロパティで あることに注意しなさい。

オブジェクトあるいは他の配列のような参照型を含めて、どんな正当な Java データ型でも配列に 含むことができる。 例えば、次は10の String オブジェクトを含むことができる配列を宣言 する。

String arrayOfStrings[] = new String[10];

この配列の要素は参照型である。すなわち、それぞれの要素が String オブジェクトへの参照を含 む。 この時点で、十分なメモリが String 参照を含むために割り当てられているが、 String 自身に対するメモリは割り当てられていない。 もしこの時点で arrayOfStrings の要素 の1つにアクセスしようとすると、配列が空であり、文字列と String オブジェクトを含まな いので、 NullPointerException を得るであろう。 これは Java 言語に不慣れなプログラマにし ばしば混乱をもたらす元である。 実際の String オブジェクトを別に割り当てなければならない。
for (int i = 0; i
 < arrayOfStrings.length; i ++) {
    arrayOfStrings[i] = new String("Hello " + i);
}

文字列

文字データの並びが文字列と呼ばれ、String クラス( java.lang パッケージのメンバ)によっ て Java 環境で実装される。 文字数を数えるプログラムは 2 つの異なった場所で文字列を使用している。 1 つ目は main() メソッドの定義内である。
String args[]

このコードは、明示的に String オブジェクトを含む args という配列を宣言する 。 上記のコードで見たように、空の角括弧は配列の長さがコンパイル時に不明であること を表す。

プログラム例での String の2つ目の使用は、2つのリテラル文字列(二重引用符 " と "の間に ある文字列)である。

"Input has "
    . . .
" chars."

コンパイラは、リテラル文字列を見つけると、暗黙的に String オブジェクトを割り当てる。 それで、プログラムは暗黙的に前に示された 2 つのリテラル文字列のそれぞれに 2 つの String オブジェクトを割り当てる。

String オブジェクトは不変である − すなわち、それらは1度作成されたら変更することができ ない。 java.lang パッケージは異なるクラスである StringBuffer を提供する。そのクラスは、文字データを作成したり操作したりするために使用することができる。Stringと StringBuffers はStringと StringBuffer の使 用を説明する完全なレッスンである。

文字列連結

Java では + 演算子を使用して、容易に文字列を連結することができる。 プログラム例では、出力をプリントす るために Java 言語のこの機能を使用している。 次のコードは、出力を作り出すために3つの文字列 を連結する。
"Input has " + count + " chars."

連結した2つの文字列がリテラル文字列である("Input has " と " chars."。) 真ん中の文字列は、実際に最初に文字列に変換される整数であり 、他の文字列へ連結される。

参照

java.lang.String
Stringと StringBuffer クラス


Previous | Next | Trail Map | Writing Java Programs | Java 言語のナットとボルト