4

こんにちは、長さ 10,100,1000,10000 の 4 つの文字列配列を初期化しようとしていますが、これらの配列は次のようになります

array1={"0","1",..."9"} 
array2={"00","01",..."99"} 
array3={"000","001",..."999"} 
array4={"0000","0001",..."9999"} 

しかし、静的イニシャライザのコードが 65535 バイトの制限を超えていますというエラーが表示されます

配列を初期化するにはどうすればよいですか?

また、ファイルからロードすることは私にとってオプションではないことに注意してください:(

4

3 に答える 3

7

forループを使用します。例えば:

for (int i = 0; i <= 9; i++)
    array1[i] = String.valueOf(i);
于 2012-04-18T10:21:42.033 に答える
7

定数配列は、定数プールから各値をロードし、対応する配列インデックスに割り当てることによって、Java バイトコードで初期化されます。これには、配列要素ごとに数バイトのコードが必要です。jvm メソッドのサイズは 65535 バイトに制限されています。これは、その長さが 16 ビットの数値を使用してクラス ファイルに格納されているためです。

ループ内で値を簡単に計算できない場合は、初期化を個別の静的関数に分割できます。

static {
    array1 = getValuesForArray1();
    ...
}

private static String[] getValuesForArray1() {
    ...
}

初期化値にパターンがある場合は、もちろんその場で値を計算することをお勧めします。

于 2012-04-18T10:40:53.817 に答える
2

int 引数を取り、その配列インデックスにあるはずの文字列値を返すメソッドを作成することで、より適切に解決できる可能性があります。ここでは、String.format を使用し、左パディングの長さを指定しています。

private static String getValue(int index, int stringLength) {
    return String.format("%0" + stringLength + "d", index);
}
于 2012-04-18T10:47:24.577 に答える