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)








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