Java中String,StringBuilder和StringBuffer的区别
开发Android也有几个年头了 一直没有做过总结 导致对基础知识的认识特别不牢固 今天就来总结下String StringBuilder StringBuffer 他们的区别
先来认识下String类
String 字符串常量 之前只知道String 是不可变的 但是一直在纠结 明明是可变的啊 比如
String str="aabb";
str=str+"cccc";
System.out.println(str); //str:aabbcccc
str 的值明明已经发生了改变 为什么说他是没变呢? 其实 这是JAVA JVM 的一种欺诈性
JVM 是这样解析代码的 首先创建一个对象str 并赋值aabb
等执行第二行代码时 他会创建一个新的对象 所有说第一行的str 并没有改变 只是引用被清空了 然后第一行的str 就等着被GC 回收
所以 本质上 str 并没有发生改变
接下来我们说一下StringBuilder
对字符串的改变 我们通常使用StringBuilder 同样的操作
StringBuilder builder=new StringBuilder().append("aabb");
builder.append("cccc");
System.out.println(builder.toString());
同样是拼接字符串 StringBuilder 是在一个对象上追加值 而不是一直创建新的对象 所有 在字符串的拼接上 StringBuilder更胜String 一筹
接着我们说一下StringBuffer 同样是拼接字符串
StringBuffer builder = new StringBuffer().append("aabb");
builder.append("cccc");
System.out.println(builder.toString());
我们可以看到 在写法上 StringBuffer 和StringBuilder 是完全一样的 那我不免又心存疑惑了 为什么有了StringBuilder 还要一个StringBuffer 呢
原来 StringBuilder 随度虽然快 但是他是线程不安全的 当我们有多个线程操作字符串缓冲区时 JVM不能保证StringBuilder的操作是安全的 StringBuffer 的执行速度比StringBuilder 稍慢 但是他的线程是安全的 在多个线程操纵字符串缓冲时 JVM 可以保证操作是安全的
总结一下
当我们对单个字符串操作时
Sting优于StringBuilder 优于StringBuffer
在执行多个字符串拼接时
StringBuilder 优于StringBuffer优于Sting
刚刚尝试 本着共同进步的态度 有什么不对的,希望各位给予指正 谢谢!!!!