Java 配列は、定義上、固定サイズです。自動拡張が必要な場合は、XXXList クラスを使用します。
編集 - 質問が少し明確になりました
私が Java を学び始めたとき (C および C++ のバックグラウンドを持っていた)、おそらくこれが最初につまずいた原因の 1 つです。うまくいけば、私はいくつかの光を当てることができます.
C++ とは異なり、Java のオブジェクト配列はオブジェクトを格納しません。オブジェクト参照を格納します。
C++ で、次のようなものを宣言したとします。
String myStrings[10];
10 個の String オブジェクトを取得します。この時点で、println(myStrings[5].length); のようなことを行うことは完全に合法です。- '0' を取得します - String の既定のコンストラクターは、長さ 0 の空の文字列を作成します。
Java では、新しい配列を作成すると、10 個の String 参照を保持できる空のコンテナーが取得されます。だから呼び出し:
String[] myStrings = new String[10];
println(myStringsp[5].length);
実際には String 参照を配列にまだ配置していないため、null ポインター例外がスローされます。
C++ のバックグラウンドを持っている場合は、new String[10] を C++ の new (String *)[10] と同等と考えてください。
したがって、それを念頭に置いて、ArrayListがオブジェクトの自動拡張配列のソリューションである理由はかなり明確なはずです(実際、ArrayList は単純な配列を使用して実装され、必要に応じて新しい拡張配列を割り当て、拡張アルゴリズムが組み込まれています)。コンテンツを古いものから新しいものにコピーします)。
実際には、配列を使用する状況は比較的少数です。コンテナ (ArrayList や BTree に似たもの) を作成している場合、または低レベルのバイト操作を大量に行っている場合に便利ですが、ほとんどの開発が発生するレベルでは Collections クラスの 1 つを使用します。が圧倒的に好ましい技術です。