2006/12/11 月曜日

以前のエントリーで、「Javaで配列の次元はいくつまで作れるか」というのがありましたが、似たようなご質問をお客様から頂く機会がありました。

Javaの配列の「次元数あたりの配列の長さ」はいくつまで指定できるのでしょうか?

これまた、今まで受けたことのない質問でしたし、自分自身であまり考えたこともなかった内容なので、論より証拠でコードを書いてみました。

どのくらい、というのが想像つかなかったので、まずありえないような大きい数を指定してみました。
100億個の大きさの配列を作るコードです。

public class ArrayMaxTest {
	public static void main(String[] args) {
		int[] array = new int[10000000000];
	}
}

これをコンパイルすると、コンパイルエラーになり、ここで、どのくらいの大きさまで指定できるのかが判明しました。
Eclipseの場合、コンパイルエラーのメッセージは「型 int のリテラル 10000000000 は範囲外です。」と表示されます。そうです、つまり配列の大きさに指定する値のリテラルはint型なのだということがこのメッセージから読み取れます。というわけで、int型の正の値の最大値である「2147483647」を指定してみます。

public class ArrayMaxTest {
	public static void main(String[] args) {
		int[] array = new int[2147483647];
	}
}

今度はコンパイルエラーになりません。では、これより1大きい大きさにするとどうでしょう?

public class ArrayMaxTest {
	public static void main(String[] args) {
		int[] array = new int[2147483648];
	}
}

予想通り、これもコンパイルエラーになります。よって「Javaの配列の次元数あたりの長さに指定できる最大値は、int型の正の値の最大値である」ということになりそうです。

ちなみに、ヒープサイズの大きさを指定せずにデフォルトの状態で「int[] array = new int[2147483647];」を実行しようとすると、OutOfMemoryErrorになります。デフォルトのヒープサイズだと、メモリが足りなくなるのですね。

投稿者 : 中越  | 2006年12月11日 23:57  | コメント&トラックバック(0)

コメント&トラックバック





※コメントは承認制となっております。投稿されてから掲載されるまでに、時間がかかることがございますので、ご注意ください。

Spam Protection by WP-SpamFree

メイン