String StringBuffer StringBuilder区别和使用

1. String

        首先在Java里,string类是不可变的,该类没有提供修改字符串的方法,在对字符串进行拼接剪裁更改操作时,会不断申请新的地址来存储操作后的字符串,而原字符串被JVM的垃圾回收机制(GC)给回收掉了。在这里需要注意的是,不是String类型的变量不可变,是string数据内容是不可修改的。当内容修改时,只是String变量指向的字符串地址改变了。

        java为什么不推荐用+ 来拼接字符串? 因为Stirng是不可变类,每次拼接都会产生大量无用的中间对象,耗费空间而且效率低下。 新建、回收这些多余的对象会额外花费很多时间。 

      既然将String类设计成不可变的会增加很多新建和回收的过程,降低效率,问什么还要这样设计呢?因为设计者设计了字符串共享池的概念,大概意思就是字符串存储在一个公共的共享池里,很多对象可以指向同一位置,而不需要重新创建。如果你想复制一个已有的字符串,只需要将地址指向该字符串在共享池里的地址就可以,这样节省的效率会远高于字符串改变时新建回收时浪费的效率。

      关于String类的API可以参考这篇博客:https://blog.csdn.net/qq_42320048/article/details/87544831

2.StringBuffer

StringBuffer对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。StringBuffer是线程安全的在多线程的情况建议使用StringBuffer

使用实例:

public class Test{
  public static void main(String args[]){
    StringBuffer sBuffer = new StringBuffer("abc");
    sBuffer.append("123");
    sBuffer.append("&&&&");
    sBuffer.append("kkk");
    System.out.println(sBuffer);  
  }
}

 

3.StringBuilder

StringBuilder 类和StringBuffer一样,也是直接对对象的修改,操作过程中不会产生新的未使用的对象。它在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法是线程不安全的(不能同步访问),所以 StringBuilder 相较于 StringBuffer 有速度优势,所以在单线程的情况下建议使用 StringBuilder 类

使用实例:

String str1="abc";
String str2="de";
StringBuilder stringBuilder=new StringBuilder().append(str1).append(str2);
System.out.println(stringBuilder.toString());

4.总结

速度:StringBuilder > StringBuffer > String

使用原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值