Java基础第二遍-13常用对象-StringBuffer-StringBuilder

常用对象

StringBuffer(线程安全,做了线程同步)

介绍

  1. 字符串的组成原理就是通过该类实现的
  2. StringBuffer可以对字符串内容进行增删
  3. StringBuffer是一个容器(字符串缓冲区)
  4. 很多方法于String相同
  5. StringBuffer是可变长度(初始默认长度为16个字符,超过的也可以存储)

基本操作

  1. 添加,可以是任意类型的数据,byte和short可以自动转型为int

image

  1. 插入

image

  1. 删除
    image

  2. 修改

  3. package com.bixiangdong.api;
    
    public class StringBuffer1 {
        public static void main(String[] args) {
            testAppend();
            testInsert();
            testReplace();
            testDelete();
        }
        public static void testAppend(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行添加方法
            sb.append(3);
            sb.append("fdsa");
            System.out.println(sb);
        }
        public static void testInsert(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行插入
            sb.append("3fdsafd");
    
            sb.insert(1,"fdsa");//从插入到下标为1的地方
            System.out.println(sb);
        }
        public static void testDelete(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行删除方法
            sb.append("fdsafsda");
            sb.delete(1,3);//包含头不包含尾
            //清空
            sb=new StringBuffer();
            sb.delete(0,sb.length());
    
            System.out.println(sb);
        }
        public static void testReplace(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行替换方法
            sb.append("fdsafdsa");
            sb.replace(1,3,"fdsafds");//替换一个区域
            sb.setCharAt(1,'d');//替换单个位置
            System.out.println(sb);
        }
    }
    
    

StringBuilder(线程不安全,没有做同步)

  1. 不保证同步,线程不安全

  2. 功能于StringBuffer一模一样

  3. 因为是线程不同步的,不需要判断锁,那么其执行速度一定比StringBuffer快

  4. //模拟StringBuffer添加同步
    class StringBuffer{
        Object lock;
        public StringBuffer append(int x){
            synchronized (lock){
                
            }
            return null;
        }
        public StringBuffer delete(int x){
            synchronized (lock){
    
            }
            return null;
        }
    }
    

练习

  1. 下面哪种方式好?
  2. 使用StringBuilder要更好一些,因为是同一个对象可变长操作,而String操作的话就会在String常量池中产生很多字符串,很浪费空间
package com.bixiangdong.api;

public class Demo03 {
    public static void main(String[] args) {
        char[] arr = {'a','j','y','g','s','f','3'};
        System.out.println(transString(arr));
        System.out.println(transString1(arr));
    }
    //将字符数组转换为字符串-StringBuilder
    static String transString(char[] arr){
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
        }
        sb.append("]");
        return sb.toString();
    }
    //将字符数组转换为字符串-String
    static String transString1(char[] arr){
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            str=str+arr[i];
        }
        str=str+"]";
        return str;
    }
}

posted @ 2021-11-10 22:42  争取做百分之一  阅读(57)  评论(0编辑  收藏  举报