先说说 String 和 StringBuffer 的基本区别:
String类是字符串常量,是不可更改的常量。
StringBuffer是字符串变量,它的对象是可以扩充和修改的。
这里的"可变"和"不可变",和是不是final没有关系
举个例子:
String str1 = "hello";
String str2 = "world";
String str1 = str1 + str2;//这里所做的内部操作,其实不是把str1的内容改变为原str1+str2的内容这么简单, 而把创建一个新的String, 内容为str1 + str2的内容,然后再把str1这个引用重新指向新创建的String, 这就是上面说的String不可变.
而如果是StringBuffer的话,则直接更改str1的内容,而不是先创建一个新的StringBuffer
使用 StringBuffer 主要就是在性能上的考虑。
String 是一种非常常用的数据类型,但由于 String 是不可变对象,在进行 String 的相关操作的时候会产生许多临时的 String 对象。
而 StringBuffer 在操作上是在一个缓冲中进行的,性能当然优越得多。
不过,一般做为简单的字符串传递和其它操作,只不要改变字符串内容的操作,用 String 效率会高一些。
今天我就来简单地测试一下它们的效率:
java代码
- public class JavawindNet_StringTest {
-
-
-
-
- public static void main(String[] args) {
-
- String addStr="www.javawind.net";
- String str="";
- StringBuffer buff = new StringBuffer();
- int n=10000;
-
- long a = System.currentTimeMillis();
- for(int i=0;i<n;i++){
- str += addStr;
- }
- long b = System.currentTimeMillis();
- System.out.println("+= 串接 "+n+" 个 '"+addStr+" '耗时"+(b-a)+"毫秒");
-
- long c = System.currentTimeMillis();
- for(int i=0;i<n;i++){
- buff.append(addStr);
- }
- long d = System.currentTimeMillis();
- System.out.println("StringBuffer 串接 "+n+" 个 '"+addStr+"' 耗时"+(d-c)+"毫秒");
- }
- }