String,StringBuffer,StringBuilder三者之间的区别

  总结一下:
          String , StringBuffer , StringBuilder三者之间的区别
              String  字符串常量
              StringBuffer 字符串变量 线程安全 效率低
              StringBuilder 字符串变量 线程不安全 效率高

      当我们在字符串缓冲区被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快.
      但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,
      所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
     首先由于String是字符串常量一旦赋值不能被修改,因此如果要频繁对字符串进行操作还是不要选用String类型
         之前我们经常会遇到这样的例子:
         String s = " hello";
         s = s + "world";
         System.out.println(s);

         我们觉得这里的字符串变量只有一个s其实不是的当我们对字符串进行修改操作时,其实就会创建一个新的String对象去接收修改后的String对象,原来的字符串就会被垃圾回收器GC回收掉

         StringBuffer和StringBuilder就不一样了,他们俩是字符串变量,每次我们对字符串进行操作的时候,都是基于对象本身进行操作,不会像String类型产生新的对象那么麻烦,因此效率更快.

       经典例题
    String s = " hello" +"world"+"i love you ";
    StringBuffer sb = 
 new StringBuilder("hello").append("world").append("i love you");

         我们发现第一行代码执行效率比第二行其实这是JVM的一个把戏
         第一行
         String s = " hello" +"world"+"i love you ";
         实际上等同于 
         String s = "hello world i love you ";       

>   它只定义了一个字符串因此执行效率肯定高于StringBuffer但是如果这样定义在做字符串拼接时使用的外部的String对象的话进行拼接的效率就不如StringBuffer.
>   首先在内存中就会先创建四个String对象,用s4去接收前三个的字符串,然后jvm再将s1,s2,s3回收,这样子的效率明显较低
         String s1 = "hello";
         String s2 = "world";
         String s3 = " i love you";
         String s = s1 + s2 + s3;

 三者使用总结:
           1:如果操作的数据少  -->String
           2:单线程操作字符串缓冲区 下操作大量数据 -->StringBuilder
           3:多线程操作字符串缓冲区 下操作大量数据 -->StringBuffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值