StringBuffer的用法1

StringBuffer的用法1,第1张

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 
 
nt end)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存