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

认识String、StringBuffer、StringBuilder

一、String

  • 不可变
  • String 内部使用字符数组来保存字符串内容,并且该数组是 final 修饰的,所以无法改变其长度。当对 String 进行修改时,实际上是创建了一个新的 String 对象,将修改后的字符串复制到新的对象中。
  • 当修改一个String类型的字符串时需要会产生一个临时的String对象来存储修改后的字符串最后拷贝到目标字符串。
  • 线程安全,但是如果频繁修改字符串(如拼接、替换)会产生大量临时对象,增加GC负担,性能较差。
  • 适合存储常量字符串或不需要修改的场景。

二、StringBuilder

  • 可变字符串。
  • 原理:内部也使用字符数组来保存字符串内容,但是该数组没有被 final 修饰,可以改变其长度。当对 StringBuffer 进行修改时,直接在原有的字符数组上进行操作,不会创建新的对象。
  • 缺点:不是线程安全的。
  • 优点:
    • 单线程修改性能高
    • 修改操作直接在原对象上执行。

三、StringBuffer

  • 线程安全的可变字符串。
  • 可变原理:和StringBuilder原理一样。
  • 线程安全:
    • 原理:对所有修改操作(如 append(), insert(), delete() 等)都使用 synchronized 关键字修饰。
    • 锁对象:锁住的是 StringBuffer 实例本身(即 this)
  • 单线程的情况下效率低于StringBuilder
http://www.xdnf.cn/news/15432.html

相关文章:

  • vue3 el-select默认选中
  • 【设计模式】策略模式(政策(Policy)模式)
  • 从 Manifest V2 升级到 Manifest V3 的注意事项
  • Cursor三大核心AI功能
  • 详解缓存淘汰策略:LFU
  • JS红宝书pdf完整版
  • mac上BRPC的CMakeLists.txt优化:解决Protobuf路径问题
  • SCTP协议网络编程
  • 【算法】贪心算法:柠檬水找零C++
  • Redis 命令总结
  • SpringBoot3-Flowable7初体验
  • Java 内部类详解:从基础到实战,掌握嵌套类、匿名类与局部类的使用技巧
  • Vivado ILA抓DDR信号(各种IO信号:差分、ISERDES、IOBUFDS等)
  • MYSQL笔记2
  • 4. MyISAM vs InnoDB:深入解析MySQL两大存储引擎
  • 39.Sentinel微服务流量控制组件
  • 论文笔记:AnImitation Learning Approach for Cache Replacement
  • Prometheus Operator:Kubernetes 监控自动化实践
  • 深入解析Hadoop架构设计:原理、组件与应用
  • Java 高级特性实战:反射与动态代理在 spring 中的核心应用
  • ADB 调试日志全攻略:如何开启与关闭 `ADB_TRACE` 日志
  • 面试150 二叉树展开为链表
  • Redis面试精讲 Day 2:Redis数据类型全解析
  • 【操作系统-Day 5】通往内核的唯一桥梁:系统调用 (System Call)
  • 【DVWA系列】——File Upload——low详细教程(webshell工具冰蝎)
  • MySQL SQL语句精要:DDL、DML与DCL的深度探究
  • ROS2---NodeOptions
  • 01.深入理解 Python 中的 if __name__ == “__main__“
  • vue是什么
  • 【PyMuPDF】PDF图片处理过程内存优化分析