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 回答