Java noobの質問:
次のC配列と初期化コードについて考えてみます。
struct {
int x;
int y;
} point_t;
point_t points[1000];
簡単。これが作成され、ロード時にメモリが割り当てられます。
ここで、Javaでも同様のことを考えてみましょう。
public class point_t
{
public int x;
public int y;
}
point_t points[] = new point_t[1000];
// Without this loop, java will crash when you run this
for (int i=0; i<1000; i++)
{
points[i] = new point_t;
}
points[0].x = 10; // Crash would occur here without above loop
points[1].x = 10;
当初、私のJavaプログラムはnullポインター逆参照でクラッシュしていました。問題は、C ++から来て、1000個のpoint_tオブジェクトを作成する必要があることに気づかなかったことです。コメントだけですが、これは非常識なようです。アレイのサイズが100万または10億だったとします。実行時に空のエントリを使用してこの配列を「作成」するには、文字通り数秒かかります。C ++では、すべてロード時に発生します。C ++配列のセルに何が含まれるかを常に知っているとは限りませんが、私が使用している組み込みシステムでは、メモリがゼロに自動初期化されて機能することがよくあります。
では、オブジェクトの配列がある場合に、Javaで配列を作成し、メモリを割り当てるための、より簡単で、より速く、より効率的な方法はありますか?または、上記のコードで何か間違ったことをしていますか?