3

なぜこれが起こっているのか誰でも説明できますか?ファイルサイズは最大2MBです。コードの実行には 2 秒もかかりません。

try {
    while ((line = br.readLine()) != null) {
        System.out.println(line);
}
catch(Exception e)
{           
}

しかし、コードを次のように変更すると:

String temp = "";
try {
    while ((line = br.readLine()) != null) {
        temp =temp + line;
}
catch(Exception e)
{
}

比較的時間がかかることは理解していますが、470秒という膨大な時間がかかります。この違いはなぜですか?

4

2 に答える 2

6
temp =temp + line;

文字列をそのまま連結したものです。連結には、新しい文字列オブジェクトを作成し、場合によってはインターンする必要があり、多くの時間がかかります。代わりに、ほとんどの場合 StringBuilder を使用するか、同期が必要な場合は StringBuffer を使用することを検討してください。

で一度作成する

StringBuilder sb=new StringBuilder()

そして追加します:

sb.append(line);

その後、 でデータを取得できますsb.toString()

于 2013-07-10T15:52:47.613 に答える
1

Java では、文字列は不変です。したがって、このステートメント:

temp =temp + line;

ファイルの各行に新しい文字列オブジェクトを作成するため、速度が低下します。いくつかのより良い代替手段には、StringBuilderStringBufferが含まれます

文字列を連結するこれら 3 つの方法の速度を比較するいくつかのベンチマークをここで見つけることができます。

于 2013-07-10T15:53:09.407 に答える