Java中String,StringBuilder和StringBuffer的区别

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


刚刚尝试 本着共同进步的态度 有什么不对的,希望各位给予指正 谢谢!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值