懂java的看看

来源:百度知道 编辑:UC知道 时间:2024/05/22 01:35:37
请看如下代码:

long startTime = System.currentTimeMillis();
StringBuffer result = new StringBuffer(100000);
for(int i=0;i<500000;i++){
result.append("hello");

}
long endTime = System.currentTimeMillis();
System.out.println("Time taken for String concatenation using StringBuffer with setting size : "
+ (endTime - startTime)+ " milli seconds");

long startTime1 = System.currentTimeMillis();
StringBuffer result1 = new StringBuffer("hello");
for(int i=0;i<500000;i++){
result1.append("hello");
}
long endTime1 = System.currentTimeMillis();
System.out.println("Time taken for String concatenation using StringBuffer with out setting size : "
+ (endTime1 - startTime1)+ " milli seconds");
按照网

不同的java 虚拟机执行结果是不同的,而且没次执行的执行结果也是不同的。 我这里是jdk1.4版本。执行时间在125左右。每此执行有时候是前者快, 有时候是后者快。

有写东西并不是书上写的就是对的。 不要转牛角尖。。哈哈。。

我试了试,也发现了你的问题,包括不带参数的构造函数new StringBuffer();,

总的来说是("hell") < () < (1000000).

期待的楼下DX们…………

StringBuffer在增大内部buffer的时候的实现是开辟一个于(原来长度 + 1)* 2的内存区,然后拷贝旧数据到新buffer。在你的程序中这一动作执行越到后来越耗时。你初始化100,000节约的开始分配和拷贝时间并不是大头,有可能被操作系统的线程处理时间混淆。你可以尝试一次性分配足够的内存,必然前者快。

另外,JDK5的StringBuffer速度不如StringBuilder,因为前者有线程同步。