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

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.lryc.cn/news/2393199.html

相关文章:

  • Android学习之定时任务
  • WEB安全--RCE--webshell HIDS bypass4
  • 基于python+Django+Mysql的校园二手交易市场
  • 从零打造算法题刷题助手:Agent搭建保姆级攻略
  • Oracle 12c新增的数字转换验证VALIDATE_CONVERSION函数
  • 参数/非参数检验和连续/离散/分类等变量类型的关系
  • 懒人云电脑方案:飞牛NAS远程唤醒 + 节点小宝一键唤醒、远程控制Windows!
  • 【Python】第一弹:对 Python 的认知
  • 直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案
  • Java源码中有哪些细节可以参考?(持续更新)
  • GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作
  • day 23 机器学习管道(pipeline)
  • shell编程笔记
  • 鸿蒙仓颉开发语言实战教程:自定义组件
  • 基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
  • opencvsharp usb摄像头录像 c# H264编码
  • ch12 课堂参考代码 及 题目参考思路
  • uniapp 实现腾讯云 IM 消息已读回执
  • JavaScript 性能优化按层次逐步分析
  • 三分钟打通Stable Diffusion提示词(附实战手册)
  • 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • 特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • div或button一些好看实用的 CSS 样式示例
  • USB充电检测仪-2.USB充电检测仪硬件设计
  • 如何查询服务器的端口号
  • AU6815集成音频DSP的2x25W数字型ClaSS D音频功率放大器(替代TAS5805)
  • DeepSeek R1开源模型的技术突破与AI产业格局的重构
  • 打破认知壁垒重构科技驱动美好生活 大模型义务传播计划