StringBuffer,StringBuilder,

news2024/10/5 19:10:55
  1. StringBuffer
    1. 结构示意图, Serializable,可以实现网络传输
    2. package com.jshedu.StringBuffer_;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class StringBuffer01 {
          public static void main(String[] args) {
              /*
              1.在父类中AbstractStringBuilder 属性char[] value不是final
                该value数组存放 字符串内容,引出存放在堆中。
              2.StringBuffer 是一个final类,不能被继承
               */
              StringBuffer hello = new StringBuffer("hello");
          }
      }
      

      StringBuffer字符内容是存在char[] value,所有在变化(增加/删除)不用每次都更换地址(即不是每次创建新对象),所以效率高于String

    3. String保存的是字符串常量,里面的值不能更改(每次String类的更新实际上就是更改地址,是里面又创建了个新的对象,所以地址更改)效率较低,private final char value[];

    4. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址【当把原数组占满才开辟一个新的大的数组然后把原先的数据复制过来,这时地址才改变】,效率高。char[] value;//这个放在堆

  2. StringBuffer构造器
    1. package com.jshedu.StringBuffer_;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class StringBuffer02 {
          public static void main(String[] args) {
              //1.创建一个 大小为16的char[],用于存放字符内容
              StringBuffer stringBuffer = new StringBuffer();
              //2.通过构造器指定char[]大小
              StringBuffer stringBuffer1 = new StringBuffer(100);
      
              //3.通过给一个String 创建 StringBuffer,char[] 大小就是str.length()+16
              StringBuffer hello = new StringBuffer("hello");
      
      
          }
      
      }
      

      构造器指定char[]的大小不一样

    2. package com.jshedu.StringBuffer_;
      
      /**
       * @author Mr.jia
       * @version 1.0
       */
      
      public class StringBuffer03 {
          public static void main(String[] args) {
              //String--->StringBuffer
              String str = "hello tom";
              //方式1:使用构造器
              //注意:返回的才是StringBuffer对象,对str本身没有影响
              StringBuffer stringBuffer = new StringBuffer(str);
              //方式2:使用append方法
              StringBuffer stringBuffer1 = new StringBuffer();
              stringBuffer1 = stringBuffer1.append(str);
      
              //StringBuffer--->String
              StringBuffer stringBuffer3 = new StringBuffer("红楼梦");
              //方式1 使用StringBuffer提供的 toString方法
              String s = stringBuffer3.toString();
              //方式2 使用构造器
              String s1 = new String(stringBuffer3);
      
          }
      }
      

      转换的方式

    3. package com.jshedu.StringBuffer_;
      
      /**
       * @author 韩顺平
       * @version 1.0
       */
      public class StringBufferMethod {
          public static void main(String[] args) {
      
              StringBuffer s = new StringBuffer("hello");
              //增
              s.append(',');// "hello,"
              s.append("张三丰");//"hello,张三丰"
              s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
              System.out.println(s);//"hello,张三丰赵敏100true10.5"
      
      
              //删
              /*
               * 删除索引为>=start && <end 处的字符
               * 解读: 删除 11~14的字符 [11, 14)
               */
              s.delete(11, 14);
              System.out.println(s);//"hello,张三丰赵敏true10.5"
              //改
              //老韩解读,使用 周芷若 替换 索引9-11的字符 [9,11)
              s.replace(9, 11, "周芷若");
              System.out.println(s);//"hello,张三丰周芷若true10.5"
              //查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
              int indexOf = s.indexOf("张三丰");
              System.out.println(indexOf);//6
              //插
              //老韩解读,在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
              s.insert(9, "赵敏");
              System.out.println(s);//"hello,张三丰赵敏周芷若true10.5"
              //长度
              System.out.println(s.length());//22
              System.out.println(s);
      
          }
      }
      

      StringBuffer的方法

  3. StringBuilder

    1. 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

    2. StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。

    3. StringBuilder 的实例用于多个线程是不安全的。

  4. String,StringBuilder,StringBuffer比较

    1. StringBuffer和StringBuilder非常类似,均代表可变的字符序列,而且方法也一样。

    2. String:不可变字符序列,效率低,但是复用率高

    3. StringBuffer:可变字符序列,效率较高(增删),线程安全,看源码

    4. StringBuilder:可变字符序列,效率最高,线程不安全

    5. String使用注意说明:String s="a";//创建一个字符

      1. s+="b";//实际上原来的"a"字符串对象已经丢弃了,现在又产生一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能==>结论:如果我们对String做大量修改,不用String。

  5. String,StringBuilder,StringBuffer的选择

    1. 如果字符串存在大量的修改操作,一般使用 StringBuffer 或StringBuilder

    2. 如果字符串存在大量的修改操作,并在单线程的情况,使用 StringBuilder

    3. 如果字符串存在大量的修改操作,并在多线程的情况,使用 StringBuffer

    4. 如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等

    5. StringBuilder的方法使用和 StringBuffer 一样

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

博弈论在电动车和电网系统中分布式模型预测控制研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Android中使用有趣的指示器和过渡自定义 Compose Pager

Android使用有趣的指示器和过渡自定义 Compose Pager google最近在compose中新增了Pager控件&#xff0c;HorizontalPager和VerticalPager。 页面之间的转换 该文档涵盖了访问页面从“对齐”位置滚动到多远的基础知识。我们可以使用这些信息来创建页面之间的过渡效果。 例…

DC:4通关详解

信息收集 漏洞发现 访问web 尝试弱口令 账号admin 可以执行ls du df看看发的包,我们是否有机会执行任意命令 发现post传参radio处可以任意命令执行 弹个shell先 提权 从vps上下载LinEnum.sh来枚举脆弱性 优化shell 现在shell就有自动补齐了 在/home/jim下发现密码字典…

cube-studio AI平台 提供开源模型示例列表(3月份)

文章目录背景AI应用商店背景 cube是腾讯音乐开源的一站式云原生机器学习平台&#xff0c;目前主要包含 1、数据管理&#xff1a;特征存储、在线和离线特征&#xff1b;数据集管理、结构数据和媒体数据、数据标签平台 2、开发&#xff1a;notebook(vscode/jupyter)&#xff1b…

【PTA天梯赛】L1-001 L1-002 L1-003 L-004 L-005 L-006 L-007 L-008 L-009 L1-010 c++

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;狠狠的刷题&#xff01;&#xff01;&#xff01;&#x1f308; 若有帮助&#xff0c;还请…

【Ubuntu 22.04 上配置 FTP 服务器步骤】

Ubuntu 22.04 上配置 FTP 服务器步骤 1.安装 vsftpd 软件包&#xff1a; sudo apt-get update sudo apt-get install vsftpd 2.查看vsftpd版本和状态&#xff0c;确认vsftpd安装成功和正常启动 2.修改 vsftpd 配置文件&#xff1a; sudo nano /etc/vsftpd.conf 3.在配置文件中…

Ethercat概念学习

Ethercat技术调研 背景 最近我们要基于Ethercat技术进行开发&#xff0c;首先需要了解其基本原理&#xff0c;github上看到了有相关实现&#xff0c;一起来看看吧。 Ethercat技术 速度更快 传输速率:2*100 Mbaud 全双工 高速性、高实时性 微秒级 像火车一样有帧头、帧尾&a…

如何对农田温室气体进行有效模拟?

农业是甲烷&#xff08;CH4&#xff09;、氧化亚氮&#xff08;N2O&#xff09;和二氧化碳&#xff08;CO2&#xff09;等温室气体的主要排放源&#xff0c;占全产业排放的13.5%。农田温室气体又以施肥产生的N2O和稻田生产产生的CH4为主&#xff0c;如何对农田温室气体进行有效…

计算机组成原理(四)输入/输出系统

一、概述 1.1前言 I/O设备是计算机组成原理之硬件最后的一部分。输入输出系统是计算机系统当中种类最多、功能最多、结构最复杂、构成也最多样的系统。在现代计算机系统当中&#xff0c;外部设备的总成本可以占到计算机总成本的80%以上。可以说&#xff0c;没有这些丰富多彩的外…

「Vue面试题」Vue项目中有封装过axios吗?主要是封装哪方面的?

一、axios是什么 axios 是一个轻量的 HTTP客户端 基于 XMLHttpRequest 服务来执行 HTTP 请求&#xff0c;支持丰富的配置&#xff0c;支持 Promise&#xff0c;支持浏览器端和 Node.js 端。自Vue2.0起&#xff0c;尤大宣布取消对 vue-resource 的官方推荐&#xff0c;转而推荐…

(原创)Flutter基础入门:实现各种Shape效果

前言 上一篇博客讲了Flutter的装饰器Decoration Flutter基础入门&#xff1a;装饰器Decoration 装饰器就可以帮我们实现各种Shape效果 但上篇文章并没有讲如何实现具体的Shape效果 那么具体要怎么做呢&#xff1f;这篇文章就主要讲这块 在Fluter中实现Shape效果时&#xff0c;…

Servlet(一)

目录 1.什么是Servlet 2.servlet程序 2.1 创建项目 2.2 引入依赖 2.3 创建目录 2.4 编写代码 2.5 打包程序 2.6 部署程序 2.7 验证程序 3.更简单的部署方法 3.1 安装 3.2配置 4.访问出错怎么办 4.1 404 4.2 405 4.3 500 4.4 空白页面 4.5 无法访问此页面 5.se…

Gin web框架初步认识

Goland使用及gin框架下载引入 第一次使用Goland时需要配置GOROOT、GOPATH、Go Modules 配置完成后进入面板&#xff0c;右键选择Go Modules文件&#xff0c;或者在go工作区通过命令go mod init [name]创建go mod项目。 创建完的项目一般都有go.mod文件和go.sum&#xff0c;前者…

Mysql【安装教程】

Mysql安装教程 1.安装教程 可以去官网下载这个版本的&#xff1a;mysql-installer-community-8.0.31.0 双击点开&#xff0c;选择自定义&#xff1a; 选择主键&#xff1a;左边选择之后就点蓝色按钮添加到右边去&#xff0c;next&#xff1a; 如果出现这个页面&#xff0c…

机器视觉检测系统的基本流程你知道吗

工业制造业种&#xff0c;首先我们便需要了解其基本流程&#xff0c;作为工厂信息科人员&#xff0c;我们不能只依靠视觉服务商的巡检驻检来解决问题&#xff0c;为了产线的效率提升&#xff0c;我们更多的应该培养产线技术人员&#xff0c;出现问题便可以最快速度解决问题&…

领跑新能源车市“下半场”,这家企业凭什么?

中国新能源汽车市场行至下半场&#xff0c;将围绕技术升级、产品竞争力比拼、整合淘汰等趋势快速发展。 4月7日&#xff0c;在北京水立方发布的奇瑞新能源之夜上&#xff0c;奇瑞汽车全面展示新战略、新技术、新品牌和新产品&#xff0c;宣布将以全新的技术生态加速向全球科技…

光伏电池片技术N型迭代,机器视觉检测赋能完成产量“弯道超车”

电池片是光伏发电的核心部件&#xff0c;其技术路线和工艺水平直接影响光伏组件的发电效率和使用寿命。随着硅料、硅片技术逐渐接近其升级迭代空间的瓶颈&#xff0c;电池片环节正处于技术变革期&#xff0c;是光伏产业链中迭代最快的部分。P型中PERC电池片是现阶段市场的主流产…

已知原根多项式和寄存器初始值时求LFSR的简单例子

线性反馈移位寄存器&#xff08;LFSR&#xff09;是一种用于生成伪随机数序列的简单结构。在这里&#xff0c;我们有一个四项原根多项式 p(x)1x0x21102p(x) 1 x 0x^2 110_2p(x)1x0x21102​ 和初始值 S0100S_0 100S0​100。我们将使用 LFSR 动作过程来生成一个伪随机序列。…

2023美赛春季赛_赛题原文及翻译

目录 Problem Y: Understanding Used Sailboat Prices Y题翻译&#xff1a; Problem Z: The Future of the Olympics Z题翻译&#xff1a; Problem Y: Understanding Used Sailboat Prices ​Like many luxury goods, sailboats vary in value as they age and as market c…

看这一篇就够了!!!Java最全面试手册(性能优化+微服务架构+并发编程+开源框架)

Java面试手册 一、性能优化面试专栏 1.1、 tomcat性能优化整理 ​ 1.2、JVM性能优化整理 1.3、Mysql性能优化整理 二、微服务架构面试专栏 2.1、SpringCloud面试整理 2.2、SpringBoot面试整理 2.3、Dubbo面试整理 三、并发编程高级面试专栏 四、开源框架面试题专栏 4.1、Sp…