Skip to content

Java字符串 迁移

字符串类型是常用的数据类型。虽然他的使用频率甚至比有些基本数据类型还要高,但他是堆上分配而来,下面我们来看看常用的处理字符串的三个类

  1. java.lang.String
  2. java.lang.StringBuffer
  3. java.lang.StringBuilder

相同点:

都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用

不同点:

StringBuilder:是非线程安全的,可以直接在原对象上做修改

StringBuffer:是线程安全的,可以直接在原对象上做修改

String:是只读字符串,对他做的任何修改,都会创建一个新的对象

效率对比:

StringBuilder >StringBuffer>String

在日常的使用中,如果字符串的更改并不频繁,那么我们可以直接使用String声明变量,这样更方便;在循环体中,我们可以使用StringBuffer声明一个对象,然后进行append,最后通过toString方法得到一个String对象。

下面看一段代码

java
String str="久伴轻尘";
for(int i=0;i<100;i++){
    str+="喜欢吃辣子鸡!!!";
}

上面这段代码在执行过程中,每循环一次都会new一个StringBuilder对象进行append操作,最后调用toString方法返回一个新的String对象,这样做不仅会造成内存资源的浪费,还会导致性能变差,我们可以对其做出如下更改

java
StringBuffer sb=new StringBuffer("久伴轻尘");
    for(int i=0;i<100;i++){
        sb.append("喜欢吃辣子鸡!!!");
    }
String str=sb.toString();