StringBuilder和StringBuffer最详细讲解

String在定义后, String是不可变的,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

String对象内容的改变实际上是通过内存地址“断开-连接”变化来完成的,而原字符串中的内容并没有任何的改变。String str = "Hello";和str = str + " World";实质上是开辟了三个内存空间,str只是由原来指向"hello"变为指向“hello world”而已,而其原来的指向内容,是没有改变的。 因此,在以后的开发中,若要经常修改字符串的内容,请尽量少用String,因为字符串的指向“断开-连接”会大大降低性能;对于要经常修改内容的情况,建议使用:StringBuilder、StringBuffer.

案例

public class test {
    public static void main(String[] args) {
        String s = "";
        for (int i = 0;i<10000;i++){
            s += "abc";
        }
        System.out.println(s);
    }
}
public class test {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0;i<10000;i++){
            stringBuilder.append("abc");
        }
        System.out.println(stringBuilder);
    }
}
public class test {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < 10000; i++) {
            stringBuffer.append("abc");
        }
        System.out.println(stringBuffer);
    }
}

 StringBuilder和StringBuffer和String的执行速度:StringBuilder > StringBuffer > String

区别:

StringBuilder和StringBuffer的功能和方法是一样的,但是StringBuffer是线程安全,因为StringBuffer是用synchronized关键字修饰的。 

在单线程,程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低。

作用:

提高字符串的操作效率。

StringBuilder和StringBuffer的构造方法:

public StringBuilder();                               创建一个空白可变字符串对象,不含有任何内容。

public StringBuilder(String str);                 根据字符串的内容,来创建可变字符串对象。

public StringBuffer();                                 创建一个空白可变字符串对象,不含有任何内容。

public StringBuffer(String str);                   根据字符串的内容,来创建可变字符串对象。

StringBuilder和StringBuffer常用方法:

public StringBuilder append(任意类型);添加数据,并返回对象本身

public StringBuilder reverse();                反转容器中的内容

public StringBuilder length();                  返回长度(字符串出现的个数)

public String toString();                           通过toString()就可以实现把StringBuilder转换为String
 

public StringBuffer append(任意类型);添加数据,并返回对象本身

public StringBuffer reverse();                反转容器中的内容

public StringBuffer length();                  返回长度(字符串出现的个数)

public String toString();                         通过toString()就可以实现把StringBuffer转换为String

 添加

//添加数据
stringBuffer.append("java程序员,是个很好的工作");
System.out.println(stringBuffer);

//给指定的位置添加数据
stringBuffer.insert(11,"不");
System.out.println(stringBuffer);

 

//添加数据
stringBuilder.append("你好").append("不好").append("我是").append("付宇浩");
System.out.println(stringBuilder);

 我们可以看到,代码工作量很大,这里可以运用到链式编程

反转

//反转
stringBuilder.reverse();
System.out.println(stringBuilder);

//反转
stringBuilder.reverse();
System.out.println(stringBuilder);

 获取长度

//获取长度
System.out.println(stringBuilder.length());

 

//获取长度
System.out.println(stringBuffer.length());

删除

//删除片段数据
stringBuffer.delete(0,7);//删除的片段,包含头和尾
System.out.println(stringBuffer);

//删除指定数据
stringBuffer.deleteCharAt(4);
System.out.println(stringBuffer);
//删除片段数据
stringBuilder.delete(0,7);//删除的片段,包含头和尾
System.out.println(stringBuilder);

//删除指定数据
stringBuilder.deleteCharAt(4);
System.out.println(stringBuilder);

 修改

//修改元素数据,根据位置范围,添加字符串
stringBuffer.replace(2,4,"真假无所谓");
System.out.println(stringBuffer);

//修改指定位置的数据,根据位置,替换字符
stringBuffer.setCharAt(3,'s');
System.out.println(stringBuffer);
//修改元素数据,根据位置范围,添加字符串
stringBuilder.replace(2,4,"真假无所谓");
System.out.println(stringBuilder);

//修改指定位置的数据,根据位置,替换字符
stringBuilder.setCharAt(3,'s');
System.out.println(stringBuilder);

将StringBuilder和StringBuffer转换为String

//将stringBuilder转换成string
String str = stringBuilder.toString();
System.out.println(str);
//将stringbuffter转换成string
String str = stringBuffer.toString();
System.out.println(str);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值