黑马伍哲沂 发表于 2013-5-5 16:29
String、StringBuilder、StringBuf ... - package cn.itcast.problem;
- public class StringBufferTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- long begin=System.currentTimeMillis();
- testStringBuilder();
- long end=System.currentTimeMillis();
- System.out.println("cost.."+(end-begin));
- }
- private static void testString() {
- String str=new String();
- //这里循环不能太大,否则会耗时很久,甚至内存溢出;
- for(int i=0;i<20000;i++){
- //这样最垃圾的操作,每次都会有很多的new String();对象;
- str+=" * "+i+" * ";
- }
- }
-
- private static void testStringBuffer(){
- StringBuffer sb=new StringBuffer();
- for(int i=0;i<20000;i++){
- //这样用+号,每次+都会有一个StringBuilder创建出来
- sb.append(" * "+i+" * ");
- }
- String str=sb.toString();
- }
-
- private static void testStringBuffer2(){
- StringBuffer sb=new StringBuffer();
- for(long i=0;i<100000;i++){
- //注意和上面+有所不同,这样虽然更麻烦,但是更加高效;他只有一个StringBuffer;
- sb.append(" * ");
- sb.append(i);
- sb.append(" * ");
- }
- String str=sb.toString();
- }
-
- private static void testStringBuilder(){
- StringBuilder sb=new StringBuilder();
- //这里为了看到效果设置大一点:
- for(long i=0;i<100000;i++){
- //这是最高效的方式。推荐使用;
- sb.append(" * ");
- sb.append(i);
- sb.append(" * ");
-
- }
- String str=sb.toString();
- }
-
- private static void testStringBuilder2(){
- StringBuilder sb=new StringBuilder();
- for(long i=0;i<100000;i++){
- //这样不推荐使用,跟上面的一样。。。
- sb.append(" * "+i+" * ");
- }
- String str=sb.toString();
-
- }
- }
复制代码 结论:使用StringBuilder而不是StringBuffer和String;
使用多个append而不是+号;
ps:看了你的帖子回去查了下资料,虽然试验了下,如书上所说,可是我找不到原因,悲剧啊。。
建议版主加精。。。 |