String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结。 在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作。不可变类。 3.StringBuffer 也是对一串字符进行操作,但是可变类。 String: StringBuffer: 字符串连接操作中StringBuffer的效率要比String高: String str = new String("welcome to "); 并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值. 看看以下代码: 1 String tempstr = "abcdefghijklmnopqrstuvwxyz"; 2 int times = 5000; 3 long lstart1 = System.currentTimeMillis(); 4 String str = ""; 5 for (int i = 0; i < times; i++) { 6 str += tempstr; 7 } 8 long lend1 = System.currentTimeMillis(); 9 long time = (lend1 - lstart1); 10 System.out.println(time); 可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。 11 String tempstr = "abcdefghijklmnopqrstuvwxyz"; 12 int times = 5000; 13 long lstart2 = System.currentTimeMillis(); 14 StringBuffer sb = new StringBuffer(); 15 for (int i = 0; i < times; i++) { 16 sb.append(tempstr); 17 } 18 long lend2 = System.currentTimeMillis(); 19 long time2 = (lend2 - lstart2); 20 System.out.println(time2); 得到的结果为 16 有时还是 0 根据上面所说: str += "here"; 所以str += "here";可以等同于 StringBuffer sb = new StringBuffer(str); sb.append("here"); str = sb.toString(); 所以上面直接利用"+"来连接String的代码可以基本等同于以下代码 21 String tempstr = "abcdefghijklmnopqrstuvwxyz"; 22 int times = 5000; 23 long lstart2 = System.currentTimeMillis(); 24 String str = ""; 25 for (int i = 0; i < times; i++) { 26 StringBuffer sb = new StringBuffer(str); 27 sb.append(tempstr); 28 str = sb.toString(); 29 } 30 long lend2 = System.currentTimeMillis(); 31 long time2 = (lend2 - lstart2); 32 System.out.println(time2); 平均执行时间为46922左右,也就是46秒。
|
|