• Java_StringBuilder类_StringBuffer类


    【一】字符串的分类:

    (1)不可变字符串:String
    (2)可变字符串:StringBuilder、StringBuffer
    疑问:
    (1)可变不可变?
    (2)重点讲:StringBuilder
    (3)StringBuilder和StringBuffer的区别

    【二】StringBuilder底层:非常重要的两个属性:

    在这里插入图片描述

    【三】对应的内存分析:

    public class Test05 {
        public static void main(String[] args) {
            //创建StringBuilder的对象:
            StringBuilder sb3=new StringBuilder();
            //表面上调用StringBuilder的空构造器,实际底层是对value数组进行初始化,长度为16
            StringBuilder sb2=new StringBuilder(3);
            //表面山调用StringBuilder的有参构造器,传入一个int类型的数,实际底层就是对value数组进行初始化,长度为你传入的数字
            StringBuilder sb=new StringBuilder("abc");
            sb.append("def").append("aaaaaaa").append("bbb").append("ooooooooo");//链式调用方式:return this
            System.out.println(sb.append("def").append("aaaaaaa").append("bbb").append("ooooooooo"));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    【四】String可变与StringBuilder不可变

    【1】String—>不可变

    在这里插入图片描述

    【2】StringBuilder—>可变

    可变,在StringBuilder这个对象的地址不变的情况下,想把abc变成abcdef是可能的,直接追加即可

    public class Test06 {
        public static void main(String[] args) {
            StringBuilder sb=new StringBuilder();
    
            System.out.println(sb.append("abc") == sb.append("def"));//true
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    【五】StringBuilder常用方法

    代码:

    public class Test01 {
        public static void main(String[] args) {
            StringBuilder sb=new StringBuilder("nihaojavawoaini");
            //增
            sb.append("这就是梦想啊!");
            System.out.println(sb);//nihaojavawoaini这就是梦想啊!
            //删
            sb.delete(3,6);//删除位置在[3,6)上的字符
            System.out.println(sb);
    
            sb.deleteCharAt(16);//删除指定位置在16上的字符
            System.out.println(sb);
    
            //改--->插入
            StringBuilder sb1=new StringBuilder("$1234567890");
            sb1.insert(3,",");//在下标为3的位置插入
            System.out.println(sb1);
            StringBuilder sb2=new StringBuilder("$2你好啊,88888");
    
            //改--->替换
            sb2.replace(3,5,"我爱你");//在下标[3,5)位置上插入字符
            System.out.println(sb2);
            sb.setCharAt(3,'l');
            System.out.println(sb);
            //查
            StringBuilder sb3=new StringBuilder("asdfgh");
            for (int i = 0; i <sb3.length() ; i++) {
                System.out.println(sb3.charAt(i)+"\t");
            }
            System.out.println();
    
            //截取
            String str=sb3.substring(2,4);//截取[2,4)返回的是一个新的String,对StringBuilder没有影响
            System.out.println(str);
            System.out.println(sb3);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    【六】StringBuffer常用方法

    代码:

    public class Test02 {
        public static void main(String[] args) {
            StringBuffer sb=new StringBuffer("nihaojavawoaini");
            //增
            sb.append("这就是梦想啊!");
            System.out.println(sb);//nihaojavawoaini这就是梦想啊!
            //删
            sb.delete(3,6);//删除位置在[3,6)上的字符
            System.out.println(sb);
    
            sb.deleteCharAt(16);//删除指定位置在16上的字符
            System.out.println(sb);
    
            //改--->插入
            StringBuffer sb1=new StringBuffer("$1234567890");
            sb1.insert(3,",");//在下标为3的位置插入
            System.out.println(sb1);
            StringBuffer sb2=new StringBuffer("$2你好啊,88888");
    
            //改--->替换
            sb2.replace(3,5,"我爱你");//在下标[3,5)位置上插入字符
            System.out.println(sb2);
            sb.setCharAt(3,'l');
            System.out.println(sb);
            //查
            StringBuffer sb3=new StringBuffer("asdfgh");
            for (int i = 0; i <sb3.length() ; i++) {
                System.out.println(sb3.charAt(i)+"\t");
            }
            System.out.println();
    
            //截取
            String str=sb3.substring(2,4);//截取[2,4)返回的是一个新的String,对StringBuilder没有影响
            System.out.println(str);
            System.out.println(sb3);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    【七】String、StringBuilder、StringBuffer区别和联系

    【1】String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁
    【2】StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、reverse、setCharAt、setLength等方法改变其内容,一旦生成了最终的字符串,调用toSting方式将其转变为String
    【3】JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder
    **StringBuilder ** JDK1.5开始 效率高 线程不安全
    StringBuffer: JDK1.0开始 效率低 线程安全

  • 相关阅读:
    【考研数学】概率论与数理统计 —— 第六章 | 数理统计基本概念(1,基本概念)
    服务器都有哪些系统
    基于CNN的动物识别系统[完整实战源码]
    vue3的宏到底是什么东西?
    在Mongodb查询语句中使用hint()
    yolo数据集的制作教程之海绵宝宝数据集的制作
    Swift方法mutating关键字的本质
    面试中的最常被问到的两种锁
    学会根据数据手册指令格式发送数据
    MIT课程分布式系统学习03——GFS
  • 原文地址:https://blog.csdn.net/XC13546508094/article/details/126135453