首先给出运行速度的比较 :StringBuilder > StringBuffer > String
- String
String是一个字符串常量,也就是说String一旦创建之后是不能更改的。在下面的代码中看似字符串s被修改了,但其实系统是新建了一个s,然后将原来的s加上字符串"money"赋值给这个新建的s,然后将原来的s回收掉,从而来达到字符串修改的目的。所以,对String类型字符串的操作就是不断的新建对象并且回收旧对象的过程,执行速度很慢。
String s = "i got ";
s = s + "money";
System.out.println(s);
- StringBuffer和StringBuilder
StringBuffer和StringBuilder 都是字符串变量,对这两种类型的字符串进行操作是直接对该对象进行操作,不涉及对象的新建和回收,执行速度较快。另外声明对象不能像上面String示例代码一样,可以通过下面两种方式进行变量的声明。
StringBuffer s1 = new StringBuffer();
StringBuilder s2 = new StringBuilder("kk");
- StringBuffer和StringBuilder有什么区别 ?
这两者的区别是相对于线程安全来说的,StringBuffer是线程安全的,StringBuilder是线程不安全的,所以StringBuffer的速度要比StringBuilder慢一点。若程序是多线程的,就需要用到确保线程安全的StringBuffer,但是在单线程用StringBuilder就可以了。