2012-03-04 19 views

答えて

5

sourceをご覧ください。

フィールドのcountは、文字列のサイズがintであることを示します。オーバーフローが発生します。

private final int count; 
+1

また、ソースを使用せずに、 'charAt()'メソッドは 'int'パラメータを取るので、このサイズを超えて文字にアクセスする方法はありません。 –

+2

@PaŭloEbermann:真。私はちょうど私がこれらの種類の質問をしているときに、ソースを見て良い習慣を見つける、コミュニティとこの習慣を共有したい。 – amit

+2

また、内部の 'char []'を見ることもできます。これは、Integer.MAX_VALUE要素だけを含むこともできます。配列のサイズも 'int'として与えられます。 –

2

javaのStringは参照型なので、文字列は連続したメモリブロックに格納されます。このブロックは整数インデックスでアクセス可能でなければなりません。 32ビットコンピュータアーキテクチャでは、メモリの範囲は0〜2^32 -1でなければなりません。このアーキテクチャは、intプリミティブデータ型の範囲に相当します。

基本整数型では、メモリ範囲を指定できます。したがって、メモリを超える文字列は保存できません。

さらに、プログラムメモリを超えるデータは、システムメモリに比べて非常に限られたメモリしか格納できません。アプリケーションメモリを超過すると、stackOverFlow例外が発生します。

3

長さ2 bnの単一文字列を格納する代わりに(これはbtwを作成するために8 GBのメモリを使用します)文字列の集合を作成できます。その作業は簡単ではありませんが、事実上どのような長さでもかまいません。

関連する問題