一文搞懂String、StringBuffer、StringBuilder三者的对比以及扩容机制

news/2025/1/12 4:50:20/

在这里插入图片描述
在这里插入图片描述

  • String:不可变的字符序列;底层使用char[]存储
  • StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
  • StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储

注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder
会改变其值

2.StringBuffer与StringBuilder的内存解析

在这里插入图片描述

StringBuffer为例:
String str = new String();//char[] value = new char[0];
String str1 = new String("abc");//char[] value = new char[]{'a','b','c'};StringBuffer sb1 = new StringBuffer();//char[] value = new char[16];底层创建了一个长度是16的数组。
System.out.println(sb1.length());//0
sb1.append('a');//value[0] = 'a';
sb1.append('b');//value[1] = 'b';StringBuffer sb2 = new StringBuffer("abc");//char[] value = new char["abc".length() + 16];//问题1. System.out.println(sb2.length());//3
//问题2. 扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。指导意义:开发中建议大家使用:StringBuffer(int capacity)StringBuilder(int capacity)

具体的扩容策略如下:

当需要扩容时,StringBuffer和StringBuilder会根据当前容量选择一个新的容量值。通常,

  • 新容量的选择是基于当前容量的两倍加上一个固定的增量(默认为16)。
  • 创建新的字符数组,并将原有的字符复制到新数组中。
  • 更新内部的容量和字符数组引用,以反映扩容后的状态。

3.对比String、StringBuffer、StringBuilder三者的执行效率
从高到低排列:StringBuilder > StringBuffer > String

4.StringBuffer、StringBuilder中的常用方法

StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer insert(int offset, xxx):在指定位置插入xxx
StringBuffer reverse() :把当前字符序列逆转public int indexOf(String str)
public String substring(int start,int end)
public int length()
public char charAt(int n )
public void setCharAt(int n ,char ch)

增:append(xxx)
删:delete(int start,int end)
改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
查:charAt(int n )
插:insert(int offset, xxx)
长度:length();
*遍历:for() + charAt() / toString()


http://www.ppmy.cn/news/498197.html

相关文章

CASAIM签约AMOOL TRADING COMPANY LTD,正式进军中东市场

随着3D打印、三维数字化及全自动化智能检测技术的不断进步和应用领域的扩大,全球市场在高速增长。CASAIM作为国内领先的3D打印、三维数字化及全自动化智能检测技术研发及制造商,一直致力于为全球智能制造企业提供高精度、高效率的智能制造及检测解决方案…

浏览器的渲染原理简介

看到这个标题大家一定会想到这篇神文《How Browsers Work》,这篇文章把浏览器的很多细节讲得很细,而且也被翻译成了中文。为什么我还想写一篇呢?因为两个原因, 1)这篇文章太长了,阅读成本太大,不…

Nmap手册(转自http://www.nmap.com.cn/doc/manual.shtm)

译注 该Nmap参考指南中文版由Fei Yang fyang1024gmail.com和Lei Lililei_7216611.org 从英文版本翻译而来。 我们希望这将使全世界使用中文的人们更了解Nmap,但我们不能保证该译本和官方的 英文版本一样完整,也不能保证同步更新。 它可以在Creative Comm…

《那些年啊,那些事——一个程序员的奋斗史》十一

101 回家了!从大巴下来,踏上北海的土地,段伏枥不由地深吸一口气:多么熟悉的带有腥味的空气!虽然说每年段伏枥都会回家过年,但每次都感慨万分。是啊,外出的游子谁不是这样呢?外面的世界或许很…

用十种编程需语言说新年快乐_整理新年手机和PC的10种方法

用十种编程需语言说新年快乐 Organize your phone, tablet, and computer with these quick and easy tips. 通过这些快速简便的技巧来整理手机,平板电脑和计算机。 By Jill Duffy 由 吉尔达菲 Many of us spend far too much time on our phones and PCs, and it…

自动控制的故事

(一) 小时候喜欢看杂书,没什么东西看,不正在文化大革命嘛?不过看进去了两个“化”:机械化和自动化。打小就没有弄明白,这机械化和自动化到底有什么差别,机器不是自己就会动的吗&…

怎么购买 nest_购买Nest恒温器时如何省钱

怎么购买 nest The Nest Thermostat isn’t exactly cheap, but if you’ve been in the market for a smart thermostat for a while now and just don’t want to pay full price for one, here’s how you can save money when buying the Nest Thermostat. Nest Thermostat…

nmap使用手册

NMAP(1) [FIXME: manual] NMAP(1) 名称 nmap - 网络探测工具和安全/端口扫描器 大纲 nmap [扫描类型…] [选项] {扫描目标说明} 描述 Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当…