私は最近、java.lang.String.substring メソッドが新しい文字列を返すのではなく、部分文字列化された元の文字列のビューを返すことを発見しました。これは、メモリに影響を与える可能性があります。たとえば、ASCII ファイルを読み込んでいて、部分文字列を使用してファイル内のトークンを解析し、部分文字列の結果をメモリのどこかに保存している場合、実際にメモリに保存しているのは、部分文字列操作の前の文字列全体です! もちろん、部分文字列の結果の新しい文字列を返す独自のバージョンで部分文字列をラップすることで、これを解決できます。
2415 次
3 に答える
11
辞書ファイルを1行ずつ読んで、一度噛まれたことがあります。各行は非常に短いものでしたが、 によって作成されたバッファーBufferedReaderは、各文字列が 80 文字の配列によって支えられていることを意味していました。
それが私が最初に書くことのポイントを学んだときでした:
word = new String(word);
ただし、ほとんどの場合、それは問題ではありません。もちろん、「完全に別のコピーを取得する」アプローチよりも効率的です。
于 2009-06-24T06:41:21.893 に答える
0
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html
Java ドキュメントでは、部分文字列メソッドが新しい文字列を返すと記載されています。
それとも私は質問を誤解しましたか?
また、文字列は不変です。 これがその理由を説明するSOスレッドです。
于 2009-06-24T06:39:32.643 に答える