码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java_StringBuilder类_StringBuffer类


    文章目录

    • 【一】字符串的分类:
    • 【二】StringBuilder底层:非常重要的两个属性:
    • 【三】对应的内存分析:
    • 【四】String可变与StringBuilder不可变
        • 【1】String--->不可变
        • 【2】StringBuilder--->可变
    • 【五】StringBuilder常用方法
    • 【六】StringBuffer常用方法
    • 【七】String、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开始 效率低 线程安全

    文章目录

    • 【一】字符串的分类:
    • 【二】StringBuilder底层:非常重要的两个属性:
    • 【三】对应的内存分析:
    • 【四】String可变与StringBuilder不可变
        • 【1】String--->不可变
        • 【2】StringBuilder--->可变
    • 【五】StringBuilder常用方法
    • 【六】StringBuffer常用方法
    • 【七】String、StringBuilder、StringBuffer区别和联系

  • 相关阅读:
    UE4 制作十字准心+后坐力
    Leetcode 面试题 17.10. 主要元素
    解决rosbag播放‘[FATAL] [1662351033.122111074]: Expected INDEX_DATA record‘
    2022官方发布辐轮王土拨鼠全球十大顶级公路自行车品牌排行榜
    基于SpringBoot+Vue架构的药物咨询平台
    【AutoLeaders】一些好用的网站
    SAP月结在制品结算时不产生凭证的一个问题
    基于Pango Design SuiteFPGA程序加载/固化——TMS320F28377D开发板
    神经网络(第二周)
    vue3中defineComponent 的作用
  • 原文地址:https://blog.csdn.net/XC13546508094/article/details/126135453
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号