String 字符常量 是一种不可以变的字符串类
StringBuffer 相当于有一中Buffer的概念 是可以变的 且是 线程安全的
StringBuilder 用于创建字符串操作的类 没有线程同步的概念
从功能上来说,这三个类基本上没有什么区别,String和StringBuffer的主要区别在与String是不可变的,我们通常改变String的
值其实是新建一个字符串,然后传入引用,如:
String s = "abc";
我们想要把s变成def,然后我们写语句:s = "def";其实这个操作在内部具体的运作如下:
在缓冲池里新建一个字符串 "def",然后将s的引用指向"def"这个字符串。
所以,经常需要转换的字符串尽量不要用String,不仅影响性能而且这样的程序还是不安全的。
当你强引用引用消失以后,GC就会开始回收你的垃圾,系统肯定会受影响的。
运行速度上,在部分情况下是 StringBuffer > String 的,但也有特殊情况,如:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
StringBuilfer类
在运行速度上 StringBuilder >StringBuffer
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结: 1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
以上言论,仅仅是一个初学者学习之余的看法而已,如有不正之处,还望指正。