当前位置: 首页 > news >正文

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

文章目录

  • 字符串的不可变性
  • 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.xdnf.cn/news/726283.html

相关文章:

  • Linux(9)——进程(控制篇——下)
  • 架构分享|三层存储架构加速云端大模型推理
  • C与C++相互调用
  • LearnOpenGL-笔记-其十
  • 解决RAGFlow(v0.19.0)有部分PDF无法解析成功的问题。
  • JNI开发流程
  • Ubuntu 桌面版忘记账户密码的重置方法
  • BaseTypeHandler用法-笔记
  • 【Linux 学习计划】-- 进程状态 | 进程运行、阻塞和挂起的本质 | 并行、并发与进程切换 | 进程优先级
  • Flink2.0及Flink-operater在K8S上部署
  • 基于51单片机的音乐盒键盘演奏proteus仿真
  • git查看commit属于那个tag
  • LangChain完全指南:从入门到精通,打造AI应用开发新范式
  • lua的笔记记录
  • MSTNet:用于糖尿病视网膜病变分类的多尺度空间感知 Transformer 与多实例学习方法|文献速递-深度学习医疗AI最新文献
  • LLM 使用 MCP 协议及其原理详解
  • SQL进阶之旅 Day 8:窗口函数实用技巧
  • 极简以太彩光网络解决方案4.0正式发布,“彩光”重构园区网络极简之道
  • PostgreSQL ALTER TABLE 命令详解
  • Visual Studio 2022 发布独立的 exe 文件
  • 1,QT的编译教程
  • (18)混合云架构部署
  • 论文阅读笔记——FLOW MATCHING FOR GENERATIVE MODELING
  • 二、OpenCV图像处理-图像处理
  • QT-Creator安装教程(windows)
  • 【技能篇】RabbitMQ消息中间件面试专题
  • Fusion引擎赋能:流利说如何用阿里云Serverless Spark实现数仓计算加速
  • 世冠科技亮相中汽中心科技周MBDE会议,共探汽车研发数字化转型新路径
  • 农村土地承包经营权二轮延包—生成地块的KJZB字段
  • React---day5