StringBuffer的用法1

 StringBuffer的特点:
     1、线程安全的
         不安全,就是存在同步操作同一数据的行为,效率高。
         安全的时候,没有同步操作,效率低。

         在实际开发中,效率和安全着两个问题一直都是很难平衡的问题。
         生活中的例子:
             线程安全的例子:银行的一些业务,电影院卖票,医院取号。
             线程不安全的例子:视频会员,博客评论
     2、线程安全的,StringBuffer是一个可变序列
     3、StringBuffer又称之为字符串缓冲区,就把它当作一个字符串去操作,只不过它与String相比是可以修改内容的
     4、在任何时间点,它包含着一些特定的字符序列,但是可以通过某些方法修改这字符序列的长度和内容

     简单记忆:StringBuffer是一个线程安全的可变序列。

 面试题:StringBuffer与String区别:
     1、StringBuffer的长度和内容都可以发生改变,String却不行
     2、String每创建一个新的字符串都会开辟一个新的常量池区域
         StringBuffer会提前给出容量,可以进行字符串的拼接,而不会重新弄开辟空间

StringBuffer的构造方法:
     public StringBuffer()  构造一个没有字符的字符串缓冲区,初始容量为16个字符。
     public StringBuffer(int capacity)  构造一个没有字符的字符串缓冲区和指定的初始容量。
     public StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。
public class StringBufferDemo1 {
    public static void main(String[] args) {
        //public StringBuffer()  构造一个没有字符的字符串缓冲区,初始容量为16个字符。
        StringBuffer sb1 = new StringBuffer();
        System.out.println("sb1:" + sb1); //StringBuffer重写了toString方法
        //如何获取StringBuffer的容量
        //public int capacity()返回当前容量。
        System.out.println("当前StringBuffer的容量为:" + sb1.capacity());
        //public int length()返回长度(字符数)。
        System.out.println("StringBuffer中字符串的长度为:" + sb1.length());

        System.out.println("===================================================");
        //public StringBuffer(int capacity)  构造一个没有字符的字符串缓冲区和指定的初始容量。
        StringBuffer sb2 = new StringBuffer(50);
        System.out.println("sb2:" + sb2); //StringBuffer重写了toString方法
        //如何获取StringBuffer的容量
        //public int capacity()返回当前容量。
        System.out.println("当前StringBuffer的容量为:" + sb2.capacity());
        //public int length()返回长度(字符数)。
        System.out.println("StringBuffer中字符串的长度为:" + sb2.length());

        System.out.println("===================================================");
        //public StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。
        StringBuffer sb3 = new StringBuffer("hello");
        System.out.println("sb3:" + sb3); //StringBuffer重写了toString方法
        //如何获取StringBuffer的容量
        //public int capacity()返回当前容量。
        System.out.println("当前StringBuffer的容量为:" + sb3.capacity()); // 21 = 16(初始值) + 5
        //public int length()返回长度(字符数)。
        System.out.println("StringBuffer中字符串的长度为:" + sb3.length()); // 5


    }
}

 

StringBuffer的添加功能
    public StringBuffer append(String str)
        通过观察API发现,不光可以追加字符串,还可以是任意数据类型的追加到StringBuffer中
        返回的StingBuffer是什么呢?
    public StringBuffer insert(int index,String str)

下面是相应的例子:

 

public class StringBufferDemo2 {
    public static void main(String[] args) {
        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //public StringBuffer append(String str)
        StringBuffer stringBuffer = sb.append("hello");
        System.out.println(stringBuffer);
        System.out.println(sb);
        System.out.println(sb == stringBuffer);

//        sb.append(10);
//        sb.append('a');
//        sb.append(true);
//        sb.append(12.34);
//        //无论追加的数据是什么类型,
//        一旦进入到StringBuffer中就是成了字符串
//        System.out.println(sb);
//        System.out.println(stringBuffer);

        //链式编程追加
        sb.append(10).append('a').append(true).append(12.34);
        System.out.println(sb);
        System.out.println("===============================================");
        //hello10atrue12.34
        //public StringBuffer insert(int offset,String str)
        // 将字符串插入到此字符序列中。返回的是字符串缓冲区本身
        //String参数的String按顺序插入到指定偏移量的该序列中,向上移动原始位于该位置的任何字符,
        // 并将该序列的长度增加到参数的长度。
        sb.insert(5, "hadoop");
        System.out.println(sb);//hellohadoop10atrue12.34
        // 如果str是null ,则四个字符"null"被插入到该序列中。
//        sb.insert(5,null);
        Object o = null;
        sb.insert(5, o);
        System.out.println(sb);//hellonull10atrue12.34


    }
}
remove,move,delete,drop,truncate
StringBuffer的删除功能
    public StringBuffer deleteCharAt(int index)  删除指定索引处的字符。该序列缩短了一个char
    public StringBuffer delete(int start,i
public class StringBufferDemo3 {
    public static void main(String[] args) {
        //使用带参数的构造方法创建StringBuffer对象
        StringBuffer sb = new StringBuffer("bigdata");
        System.out.println("未做删除操作之前的StringBuffer:" + sb);
//        StringBuffer sb2 = sb.deleteCharAt(3); //
//        操作的是同一个StringBuffer对象
//        System.out.println(sb);----bigata
//        System.out.println(sb2);---bigata
//        System.out.println(sb==sb2);----true
        sb.deleteCharAt(3);
        System.out.println("做删除操作之后的StringBuffer:" + sb);
        //如果 index为负数或大于或等于length() 。
        //index的值最大可以取到实际存储字符串的长度-1
//        sb.deleteCharAt(30);
//        sb.deleteCharAt(6);

        System.out.println("===============================================");
        //public StringBuffer delete(int start,int end)
        //删除此序列的子字符串中的字符。
        // 子串开始于指定start并延伸到字符索引end - 1 ,或如果没有这样的字符存在的序列的结束。
        // 如果start等于end ,则不作任何更改。
        //  start<=index<end
        //bigata
//        sb.delete(2,5);//bia(左闭右开)
//        sb.delete(2,6);//删除gata还剩bi
//        sb.delete(2,10);
        //注意开始位置一定是已经存在的索引,否则报错
//        sb.delete(8,10);
        System.out.println(sb);

        //需求:删除StringBuffer中的所有字符
        sb.delete(0, sb.length());
        System.out.println("删除StringBuffer中的所有字符:" + sb);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值