【Java SE】StringBuffer

Java中,由于String是不可变的,在拼接较短字符串时,效率较低。每次拼接都会创建一个新的String对象,这不仅耗时,还浪费内存。使用StringBuffer可以解决这个问题。StringBuffer是一个可变的字符序列,与String相比,修改字符串的效率更高,且保证线程安全。

一、StringBuffer 特点

(1)StringBuffer继承AbstractStringBuilder,而AbstractStringBuilder中有属性char[] value,不是final。该value数组存放字符串内容,引用存放在中。

(2)StringBuffer是一个final类,不能被继承。

(3)StringBuffer实现了Serializable接口,即StringBuffer对象可以被序列化并在网络间传输,也可以被保存至文件。

(4)StringBuffer方法做了互斥处理(存在synchronized关键字),推荐在多线程情况下使用(效率比String高)。

二、StringBuffer 使用

(1)构造器的使用

java 复制代码
// 创建默认大小为16的char[]
StringBuffer buffer0 = new StringBuffer();

// 创建指定大小为100的char[]
StringBuffer buffer1 = new StringBuffer(100);

// 通过String创建StringBuffer
// char[]大小为str.length() + 16
StringBuffer buffer2 = new StringBuffer("hello");

(2)与String的相互转换

java 复制代码
// String -> StringBuffer
String str = "hello";

// 方式 1:使用构造器
StringBuffer buffer0 = new StringBuffer(str);
// 方式 2:使用append方法
StringBuffer buffer1 = new StringBuffer();
buffer1 = buffer1.append(str);
java 复制代码
// StringBuffer -> String
StringBuffer buffer = new StringBuffer("hello");

// 方式 1:使用toString方法
String s0 = buffer.toString();
// 方式 2:使用构造器
String s1 = new String(buffer);

(3)增删改查插

java 复制代码
StringBuffer buffer = new StringBuffer("hello");

// 增
buffer = buffer.append(',').append(" world!").append(true).append(100).append(1.5);
System.out.println(buffer);

// 删:删除 索引>=start & < end 处字符
buffer.delete(0, 5);
System.out.println(buffer);

// 改:替换 索引>=start & < end 为新字符串
buffer.replace(0, 1, ", ");
System.out.println(buffer);

// 查:查子串在主串第一次出现的索引,若无则返回-1
int indexOf = buffer.indexOf("world");
System.out.println(indexOf);

// 插:指定索引位置插入
buffer.insert(0, "hello");
System.out.println(buffer);
相关推荐
kiramario10 分钟前
【结束】JS如何不通过input的onInputFileChange使用本地mp4文件并播放,nextjs下放入public文件的视频用video标签无法打开
开发语言·javascript·音视频
爱吃南瓜的北瓜30 分钟前
Maven之jjwt依赖爆红
java·pycharm·maven
土豆儿@40 分钟前
java之泛型
java·开发语言
橘猫云计算机设计1 小时前
基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·python·计算机网络·毕设
m0_748245341 小时前
python——Django 框架
开发语言·python·django
曼巴UE51 小时前
UE5.3 C++ TArray系列(一)
开发语言·c++·ue5
熬夜苦读学习1 小时前
Linux文件系统
linux·运维·服务器·开发语言·后端
菜鸟一枚在这1 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
gyeolhada2 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯
阿巴~阿巴~2 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先