String,StringBuffer,StringBuilder的区别


Q:String,StringBuffer,StringBuilder的区别
A:String是字符串常量,
     StringBuffer是字符串变量,它是线程安全的,可用于多线程
     StringBuilder也是字符串变量,但它是非线程安全的,常用于单线程
     
     String与StringBuffer的区别:
     String是字符串常量,For example:
     String s = "abcd";
     当操作字符串s时,如
     s += "efg";
     内存中,会先copy出"abcd",将"efg"加上去,再将s指向新生成的对象。如果进行多次这样的操作,
     内存中就会有很多无用的String常量,GC(垃圾回收机制)就会工作,这会影响程序的性能。
     StringBuffer则不一样,StringBuffer是直接在对象本身上操作,不会生成新的对象,不会造成内存的浪费。
     所以通常情况下,我们采用StringBuffer,特别是在字符串经常改变的情况下。
     但是在有些特殊情况下,String并不比StringBuffer慢。For example:
     String s1 = "This is " + "a" + " string.";
     StringBuffer s2 = new StringBuffer("This is ").append("a ").append("string.");
     这时候,s1要比s2快的多。因为对于JVM来说,s1 = "This is a string.",而s2则是
     s2 = "This is ";
     s3 = "a ";
     s4 = "string.";
     s2 = s2 + s3 + s4;
     所以s1要比s2快得多。
     
     StringBuffer的常用操作时append()和insert(),append()是直接在内容后面加上要添加
     的内容,而insert()则是插入到指定的位置,For example:
     StringBuffer s = "abcd";
     s = s.append("efg");          // 结果为s = "abcdefg"
     s = s.insert(2, "efg");          // 结果为s = "abefgcd"

     对于StringBuilder,其是在5.0加上的,与StringBuffer有兼容的API,但不保证线程同步。
     如果可能,建议优先采用StringBuilder,因为大多数情况下,StringBuilder比StringBuffer要快。

转载于:https://www.cnblogs.com/Coder816/p/4328339.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值