配列の配列

Q:配列の配列を使用するにはどうすればよいですか?

A:

String s = new String( "Hello、World"); // sは文字列参照であり、//値が「Hello、World」の文字列オブジェクトを参照します。 s = new String( "Guten Tag、Welt"); //同じString参照が//別のStringオブジェクトを参照するようになりました。つまり、//単一の参照が2つの//異なるオブジェクトを(連続して)参照しています。 //(現在、値が "Hello、World"のStringオブジェクトが//参照されていないことに注意してください。したがって、このオブジェクトは//ガベージコレクションに適格です)String t; // tはnull値を持つ文字列参照です//(オブジェクトを参照していません)。 //この時点でtを使おうとすると、たとえば// int len = t.length;と言います。 // NullPointerExceptionが発生します(// NullReferenceExceptionと呼ばれる必要があります)。 t = s;//文字列参照tは、文字列参照sによって参照される//同じオブジェクト、つまり//値が「GutenTag、Welt」の文字列オブジェクトを参照するようになりました。 //したがって、ここには1つのオブジェクトへの//参照が2つあります(同時に)。

Javaの配列は、プリミティブ(ints、chars、booleansなど)を含むか、他のオブジェクトを含むかにかかわらず、それ自体がオブジェクトです。これは、配列が他のオブジェクトと同じように参照されることを意味しますが、[]集約/逆参照のセマンティクスが追加されています。次に例を示します。

文字列[] sa; // saはnull参照です//sa.lengthにアクセスしようとすると、NullPointerExceptionが発生します。sa =新しい文字列[2]; // saはnull参照ではなくなり、2つのnull文字列参照の配列である//特定のオブジェクトを参照します。//sa.lengthは2 //に等しくなります(sa [0]とsa [1]は2つのnull文字列参照です)。sa [0] = "Hello、World"; sa [1] = "Guten Tag、Welt"; //ここで、saは2つのnull以外の文字列参照の配列を参照します。sa = new String [1]; //sa.lengthは1に等しい//同じ参照saが異なる//(およびより短い)配列を参照するようになりました。// sa [0]はnull文字列参照です// sa [1]にアクセスしようとすると// ArrayIndexOutOfBoundsExceptionが発生します。sa [0] = "Hello、World"; // sa [0]はnullではなくなりました。

配列に関するあなたの質問は、それを考慮することによって答えることができます

文字列[] [] saa; saa [0] [0] = "ヘルプ";

はnull参照NullPointerExceptionであるため、が発生します。saaつまり、saaオブジェクトを参照しません。最初の配列の最初の要素に値を割り当てるsaaには、長さがゼロより大きいの配列を参照する必要があり、長さがゼロより大きいsaa[0]非ヌルの文字列配列を参照する必要があります。したがって、次のように言うことから始めることができます。

文字列[] [] saa; // saaは文字列配列の配列へのnull参照です//saa.lengthを試行すると、saa [0]を試行する場合と同様に、// NullPointerExceptionが発生します。 saa =新しい文字列[1] []; // saaは、String []への1つのnull参照の配列を参照するようになりました。 //saa.lengthは1に等しい。//saa[0]はnull。 saa [0] =新しい文字列[2]; // saaは1つの非null参照の配列を//長さ2のString []を参照するようになりました//saa.lengthはまだ1に等しいです// saa [0] .lengthは2に等しい(ただしsaa [0] [0]と// saa [0] [1]は両方ともnullです)。 saa [0] [0] = "Hello、World"; saa [0] [1] = "Guten Tag、Welt"; //これで、saa [0] [0]とsaa [0] [1]は両方ともnullではありません。

null以外になるsaa[0][0]まで参照するsaa[0]ことはできず、saa[0]null以外にするまでnullにすることはできないことに注意してくださいsaa。基本的に、配列の配列を段階的に構築する必要があります。

配列参照を初期化するための使いやすい省略形があります。

String [] [] saa = {{{"Hello、World}、{" Guten Tag、Welt "}}}; //これにより、上記で作成したようなString [] []オブジェクトが作成され、//にsaaが割り当てられます。そのオブジェクトを参照してください。//空白は、作成された//オブジェクトが2つの文字列を含む// 1つのString []の配列であることを強調するためのものです。 

この省略形を使用すると、この例は次のように正しく記述できます。

文字列[] [] saa = {{{"ヘルプ"}}}; 

ただし、これによりsaa、1つずつ文字列配列が参照されます。上記の構文は、配列参照を初期化する場合にのみ機能することに注意してください(初期化は、宣言時の割り当ての特殊なケースです)。新しい配列を作成し、それを新しいまたは既存の配列参照に割り当てるより一般的な方法は、次のようになります(既存の参照の場合)。

saa = new String [] [] {//空の[] []に注意してください-コンパイラは//サイズを計算します(空の[] []が必要です)。{{"Hello"}、{"World"}} //これはsaa [0]、// saa [0]とsaa [1]を区切るコンマに注意してください{{"GutenTag"}、{"Welt"} } //これはsaa [1]}; //これでsaa.length = 2になり、saa [0]とsaa [1]もそれぞれ長さが2になります
ランダムウォークコンピューティングは、ニューヨークで最大のJava / CORBAコンサルティングブティックであり、金融​​企業向けのソリューションに重点を置いています。最先端のJavaの専門知識で知られるランダムウォークのコンサルタントは、世界で最も尊敬されているフォーラムのいくつかでJavaについて公開し、話します。

このストーリー「配列の配列」は、もともとJavaWorldによって公開されました。