Stringbuffer

平时在遇到字符串相关问题时,如果要进行字符串的拼接,会有什么问题?

答:因为Java中的字符串是不可变的(而且在常量池中不可被垃圾回收器回收),每次拼接都会产生新的字符串,这样会占用大量的方法区内存,造成内存空间的浪费。于是,就有了很适合字符串拼接等操作的StringBuffer和StringBuilder

一、StringBuffer

1)基础概念:
1.String类对象一旦创建就不可更改
2.如果经常对字符串内容进行修改,则使用StringBuffer。
3.如果经常对字符串内容进行修改而使用String的话,就会导致即耗空间又耗时间。
例:String s1 =“abasdmasc”; String str2 =“123”
(1):String s1 = s1 + s2;
(2):删除str1中的字母d
4.StringBuffer 对象的内容是可以改变的,因此String类中没有修改字符串的方法,但是StringBuffer类中却有大量修改字符串的方法

2).StringBuffer类的构造函数:
1.public StringBuffer():
创建一个空的没有任何字符的StringBuffer对象
2.public StringBuffer(int capacity):
创建一个不带字符,但具有指定初始容量的字符串缓冲区。
3.public StringBuffer(String str):
创建一个StringBuffer对象,包含与str对象相同的字符序列
在这里插入图片描述
3. StringBuffer常用方法(1):
重载方法public StringBuffer append(…) 可以为该stringBuffer对象添加字符序列,返回添加后的该StringBuffer对象引用(可以简单理解为拼接),例如:

public StringBuffer append(String str);
public StringBuffer append(StringBuffer sbuf);
public StringBuffer append(char[] str);
public StringBuffer append(char[] str,int offset,int len);
public StringBuffer append(double d);
public StringBuffer append(Object obj);

在这里插入图片描述
(API文档里有完整的)

public class StringBufferTest {
    public static void main(String[] args) {
        StringBuffer stringBuffer=new StringBuffer();
        stringBuffer.append("a");
        stringBuffer.append("b");
        stringBuffer.append('c');
        stringBuffer.append(123);
        System.out.println(stringBuffer);
    }
}

输出结果:abc123
4. StringBuffer常用方法(2):
1)重载方法public StringBuffer insert(…)可以为该stringBuffer 对象在指定位置插入字符序列,返回修改后的该stringBuffer对象引用,例如:
public StringBuffer insert(int offset,String str);
public StringBuffer insert(int offset,double d);
… …
在这里插入图片描述

2)方法 public StrinqBuffer delete(int start,int end) 可以删除从start开始到end为止的一段字符序列,返回修改后的该stringBuffer对象引用
在这里插入图片描述

二、StringBuilder

1.StringBuilder和StringBuffer功能差不多,也是可以完成字符串的拼接

public class StringBuilderTest {
        public static void main(String[] args) {
            StringBuilder stringBuilder=new StringBuilder();
            stringBuilder.append(1);
            stringBuilder.append('e');
            stringBuilder.append("zv");
            System.out.println(stringBuilder);
        }
}

运行结果:1ezv

2.那Stingbuffer和StringBulider有什么区别呢?

  • StringBuffer中的方法都有:synchronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的,即是线程安全的。
  • StringBuilder中的方法都没有:synchronized关键字修饰,表示StringBuilder在多线程环境下运行是不安全的,即是非线程安全的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值