Java String的使用续 -- StringBuilder类和StringBuffer

article/2025/7/25 10:26:38

文章目录

  • 字符串的不可变性
  • StringBuilder和StringBuffer
    • 函数使用

字符串的不可变性

  1. 字符串不可变是因为有private修饰,只能在类的内部使用不可以在类外使用,因此使用时是不可以修改字符串的
public class test {public static void main(String[] args) {String str = "abc";str += "def";System.out.println(str);}
}

StringBuilder和StringBuffer

public class test {public static void main1(String[] args) {String str = "abc";str += "def";System.out.println(str);}public static void main(String[] args) {String str = "hello";StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(str);stringBuilder.append("abc");str = stringBuilder.toString();System.out.println(str);}
}
  1. StringBuilder的速度明显快于String,因为每次String都会进行创建一个StringBuild对象,使用StringBuild进行append,再toString赋值给String,这样每次都创建对象和销毁对象是非常消耗时间的
  2. 每次String进行拼接会产生新的对象
  3. StringBuilder和StringBuffer每次拼接不会产生新的对象
public class Test {public static void main(String[] args) {//获取当前时间//Stringlong start = System.currentTimeMillis();String s = "";for (int i = 0; i < 10000; i++) {s += i;}//循环结束的时间long end = System.currentTimeMillis();//相减就得到了,这个创建临时变量循环的时间System.out.println("String的时间:"+(end - start));//StringBuilderlong start1 = System.currentTimeMillis();StringBuilder stringBuilder = new StringBuilder("");for (int i = 0; i < 10000; i++) {stringBuilder.append(i);//拼接}long end1 = System.currentTimeMillis();System.out.println("StringBuilder的时间:"+(end1-start1));//StringBufferlong start2 = System.currentTimeMillis();StringBuffer stringBuffer = new StringBuffer("");for (int i = 0; i <10000 ; i++) {stringBuffer.append(i);}long end2 = System.currentTimeMillis();System.out.println("StringBuffer的时间:"+(end2-start2));}
}

在这里插入图片描述

  1. javap -c TestDemo,查看汇编

在这里插入图片描述

  1. StringBuilder和StringBuffer的区别,StringBuffer是线程安全的,它所有的函数都是synchronized修饰的,表示线程安全的
  2. 线程安全是什么意思呢?
    也就是说每次只能有一个人去执行,这是锁住的,执行完会开锁,那么每次开锁和关锁是要消耗时间的,那么StringBuffer是比StringBuilder是要慢的

在这里插入图片描述

函数使用

  1. StringBuilder和StringBuffer也有String没有的方法

在这里插入图片描述
2. reverse(),对字符串进行逆置

 public static void main(String[] args) {StringBuilder stringBuilder = new StringBuilder("hello");stringBuilder.reverse();System.out.println(stringBuilder);}
  1. 区别

String的内容是不可以修改的,每次拼接都会产生一个新的对象(StringBuilder),StringBuilder和StringBuffer的内容是可以修改,每次对当前对象进行修改

String,StringBuilder,StringBuffer函数是相似的

StringBuilder是未采用同步处理的,是线程不安全的,StringBuffer是采用了同步处理的,是线程安全的


http://www.hkcw.cn/article/DwFMYWUshO.shtml

相关文章

关于xilinx pcie ip core管脚分配出现布局布线报错问题说明

一、问题说明 xilinx的pcie几个ip core选择的物理位置是固定的&#xff0c;那么相当于管脚就被指定了&#xff0c;但是这个可能和原理图的真实情况对不上 二、xilinx官方推荐 xilinx对pcie放置的位置是有推荐的&#xff0c;如果没有按照推荐的&#xff0c;是否有问题呢&#x…

全面了解DMEM培养基:功能、组成与应用

近年来&#xff0c;研究人员陆续报道了采用营养素、生长因子和激素取代血清&#xff0c;在无血清培养基中培养各种细胞系的方法。Mather和Sato&#xff08;BBRC, 1985&#xff09;报道在含有胰岛素、转铁蛋白、表皮生长因子、黄体生成素或促卵泡激素、生长调节素和生长激素的无…

晨控CK-FR08与西门子系列PLC配置MODBUS RTU通讯连接手册

晨控CK-FR08与西门子系列PLC配置MODBUS RTU通讯连接手册 产品说明&#xff1a; CK-FR08-A01是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。读卡器内部集…

基于开源链动2+1模式AI智能名片S2B2C商城小程序的企业组织生态化重构研究

摘要&#xff1a;本文以互联网时代企业组织结构变革为背景&#xff0c;探讨开源链动21模式AI智能名片S2B2C商城小程序在推动企业从封闭式向开放式生态转型中的核心作用。通过分析传统企业资源获取模式与网络化组织生态的差异&#xff0c;结合开源链动21模式的裂变机制、AI智能名…

消息队列学习总结

1.保证消息不丢失的必要条件 生产者发送消息、生产者存储消息、消费者拉取消息&#xff0c;需要保证三大流程消息不丢失&#xff0c;缺一不可。生产者保证消息完整发送并存储至broker。broker保证存储的消息不丢失。消费者保证拉取的消息一定被消费&#xff0c;即使重启了&…

Unity基础学习(十二)Unity 物理系统之范围检测

目录 一、关于范围检测的主要API&#xff1a; 1. 盒状范围检测 Physics.OverlapBox 2. 球形范围检测 Physics.OverlapSphere 3. 胶囊范围检测 Physics.OverlapCapsule 4. 盒状检测 NonAlloc 版 5. 球形检测 NonAlloc 版 6. 胶囊检测 NonAlloc 版 二、关于API中的两个重…

05.29.2025 CCNA++ 学习完成

05.29.2025 CCNA 学习完成 从哪个遥远的冬天开始的。。。断断续续鸽了几个月(春节&#xff0c;马来西亚旅游), 实际大概学习了3个半月 通过这个学习对网络的底层有了一个更全面的认识&#xff0c;后面还得经常看看才能理解这些东西 课程的资料慢慢补上来 To Be continued…

Vert.x学习笔记-什么是Worker线程池

Vert.x学习笔记 一、Worker线程池的作用二、Worker线程池的特点三、Worker线程池的使用四、Worker线程池的配置与调优五、Worker线程池的工作原理1. 任务分类与线程隔离2. Worker线程池的启动与配置3. 任务提交与执行流程4. 线程安全与上下文切换5. 性能优化与监控6. 关键特性总…

Smith圆图知识学习笔记

Smith圆图知识学习笔记 理论背景 图 1 Smith图表是由菲利普史密斯(Phillip Smith)于1939年发明的,如图1所示,当时他在美国的RCA公司工作。史密斯曾说过,“在我能够使用计算尺的时候,我对以图表方式来表达数学上的关联很有兴趣”。 史密斯图表的基本在于以下的算式: 图 …

MySQL 8.0 OCP 英文题库解析(十一)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题91~100 试题91…

RT-Thread Studio学习(十八)ADC+TIM+DMA

RT-Thread Studio学习&#xff08;十八&#xff09;ADCTIMDMA 一、简介二、新建RT-Thread项目并使用外部时钟三、启用ADC四、修改代码五、测试 一、简介 本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用ADC设备。硬件及开发环境如下&#xff1a; OS WIN…

ES分词搜索

ES的使用 前言作者使用的版本作者需求 简介ES简略介绍ik分词器简介 使用es的直接简单使用es的查询 es在java中使用备注说明 前言 作者使用的版本 es: 7.17.27spring-boot-starter-data-elasticsearch: 7.14.2 作者需求 作者接到一个业务需求&#xff0c;我们系统有份数据被…

Drawio编辑器二次开发

‌ Drawio &#xff08;现更名为 Diagrams.net &#xff09;‌是一款完全免费的在线图表绘制工具&#xff0c;由 JGraph公司 开发。它支持创建多种类型的图表&#xff0c;包括流程图、组织结构图、UML图、网络拓扑图、思维导图等&#xff0c;适用于商务演示、软件设计等多种场景…

破解高原运维难题:分布式光伏智能监控系统的应用研究

安科瑞刘鸿鹏 摘要 高原地区光照资源丰富&#xff0c;具有发展分布式光伏发电的巨大潜力。然而&#xff0c;该地区复杂的气候环境、地形地貌和运维条件对光伏电站的运行与维护带来严峻挑战。本文结合Acrel1000DP分布式光伏监控系统的技术特点和典型应用案例&#xff0c;探讨其…

Golang|分布式搜索引擎中所使用到的设计模式

迭代器模式 定义&#xff1a;在遍历接口时&#xff0c;提供统一的方法函数供调用&#xff0c;保持一致性。核心思想&#xff1a;与大众习惯保持一致&#xff0c;方便第三方实现容器类时保持一致。常见方法&#xff1a;如next()方法&#xff0c;适用于所有集合类&#xff0c;简化…

招工招聘系统开发——适配多元场景,满足企业多样化招聘需求

不同的企业有不同的招聘需求&#xff0c;不同的岗位也有不同的招聘特点。我们的招工招聘系统开发&#xff0c;充分考虑了企业的多样化需求&#xff0c;适配多元场景&#xff0c;为企业提供全方位的招聘解决方案。 对于大型企业来说&#xff0c;招聘规模大、岗位种类多、招聘流…

优化版本,增加3D 视觉 查看前面的记录

上图先 运来的超出发表上限&#xff0c;重新发。。。 #11:06:57Current_POS_is: X:77Y:471Z:0U:-2 C:\Log\V55.txt import time import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk import socket import threading from date…

《TCP/IP 详解 卷1:协议》第2章:Internet 地址结构

基本的IP地址结构 分类寻址 早期Internet采用分类地址&#xff08;Classful Addressing&#xff09;&#xff0c;将IPv4地址划分为五类&#xff1a; A类和B类网络号通常浪费太多主机号&#xff0c;而C类网络号不能为很多站点提供足够的主机号。 子网寻址 子网&#xff08;Su…

JNI开发流程

一. 引言 最近在做一个自己的项目&#xff0c;就是基于FastDDS封装一套JAVA库&#xff0c;让android和java应用可以使用dds的功能。 由于FastDDS是使用C编写的开源库&#xff0c;因此java的类库想要调用FastDDS的接口&#xff0c;需要额外编写一个JNI层的动态库对FastDDS的接口…

powershell 中 invoke-expression 报错解决

打开powershell就出现这个报错&#xff1a; 网上搜了也没有很好的解决办法&#xff0c;抱着一点点期待&#xff0c;问了豆包 根据豆包的指示&#xff0c;在终端执行以下 几个命令&#xff0c;报错解决了&#xff08;开心万岁&#xff09; # 移除多余的引号和空路径 $pathArra…