Java中的String、StringBuffer和StringBuilder

news/2025/2/2 17:52:58/

文章目录

  • Java中的String、StringBuffer和StringBuilder
    • String 类型
      • 特点
      • 操作
    • StringBuffer 类型
      • 特点
      • 操作
    • StringBuilder 类型
      • 特点
      • 操作
    • 总结
    • 代码实践
    • 注意事项

Java中的String、StringBuffer和StringBuilder

在 Java 中,字符串是最常用的数据类型之一。 Java 中有三种处理字符串的方式:String、StringBuffer 和 StringBuilder。它们都被设计为处理字符串操作,但是它们之间有所不同。本篇博客将会介绍 String、StringBuffer 和 StringBuilder 的区别以及如何在 Java 中使用这些类型。

String 类型

在 Java 中,String 表示不可变的字符序列。不可变的意思是,一旦字符串对象被创建,其内容无法被修改。

String str = "Hello World";

特点

  • 不可变性:String 对象一旦被创建,其内容就无法被修改。
  • 线程安全:由于 String 对象不可变,因此可以被多个线程同时访问而不会引起线程安全问题。
  • 性能较差:由于字符串对象不可变,每次对字符串进行操作都会创建一个新的字符串对象,所以在频繁操作字符串的时候,会造成性能问题。

操作

由于 String 对象是不可变的,因此对字符串进行操作时,实际上是创建了新的 String 对象。例如:

String str = "Hello";
str = str + " World";

上面这段代码会创建两个 String 对象(“Hello” 和 “Hello World”),并将第二个对象的引用赋值给 str。

StringBuffer 类型

在 Java 中,StringBuffer 表示可变的字符序列。这意味着字符串对象可以被修改,而不需要创建新的字符串对象。

StringBuffer sb = new StringBuffer();
sb.append("Hello ");
sb.append("World");

特点

  • 可变性:StringBuffer 对象是可变的,因此可以对字符串进行修改。
  • 线程安全:StringBuffer 中的所有方法都是同步的,因此可以在多线程环境中使用,不会出现线程安全问题。
  • 性能较好:由于字符串对象是可变的,因此不需要每次都创建新的字符串对象,所以性能较好。

操作

StringBuffer 的操作和 String 有些相似,但是由于它是可变的,因此可以直接对字符串进行修改。

StringBuffer sb = new StringBuffer("Hello World");
sb.delete(5, 6);

上面这段代码将删除 sb 中索引为 5 的字符 " "。

StringBuilder 类型

StringBuilder 是 Java SE 5 引入的,是 StringBuffer 的一个非线程安全的替代品。

StringBuilder sb = new StringBuilder();
sb.append("Hello ");
sb.append("World");

特点

  • 可变性:StringBuilder 对象是可变的,因此可以对字符串进行修改。
  • 非线程安全:StringBuilder 中的方法并不是同步的,因此不能保证在多线程环境中使用时不会出现线程安全问题。
  • 性能较好:由于字符串对象是可变的,因此不需要每次都创建新的字符串对象,所以性能较好。

操作

StringBuilder 的操作和 StringBuffer 的操作基本相同,但是 StringBuilder 的方法没有被 synchronized 关键字修饰,因此它的性能比 StringBuffer 要好。

StringBuilder sb = new StringBuilder("Hello World");
sb.insert(5, ",");

上面这段代码将在 sb 中索引为 5 的位置插入字符 “,”。

总结

String、StringBuffer 和 StringBuilder 都是处理字符串的类型,但是它们之间有很大的不同。String 是不可变的,而 StringBuffer 和 StringBuilder 是可变的。StringBuffer 和 StringBuilder 类似,但是 StringBuffer 是线程安全的,而 StringBuilder 不是。如果你需要对字符串进行频繁的修改操作,并且在多线程环境中使用,那么就应该使用 StringBuffer;否则,就可以使用 StringBuilder。

代码实践

下面给出一个使用 String、StringBuffer 和 StringBuilder 的示例代码,包括字符串的拼接、删除和插入操作。

public class StringDemo {public static void main(String[] args) {// String 示例String str = "Hello";str = str + " ";str = str + "World";System.out.println("String: " + str);// StringBuffer 示例StringBuffer sb1 = new StringBuffer("Hello");sb1.append(" ");sb1.append("World");sb1.deleteCharAt(5);System.out.println("StringBuffer: " + sb1);// StringBuilder 示例StringBuilder sb2 = new StringBuilder("Hello");sb2.append(" ");sb2.append("World");sb2.insert(5, ",");System.out.println("StringBuilder: " + sb2);}
}

注意事项

  1. 尽量使用 StringBuilder 而不是 StringBuffer,除非你需要线程安全;
  2. 在常规情况下,最好使用 String 而不是 StringBuffer 和 StringBuilder,因为不可变对象通常比可变对象更为安全和可靠。

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

相关文章

新品首发丨计讯物联5G水利遥测终端机TY511-B3,推动5G+智慧水利再进化

当前,水利在全面感知、全面互联、智慧应用等方面较其他行业存在明显差距。基于物联网行业通信技术的不断突破和水利行业对高速移动通信的强烈需求,5G移动通信以高速率、大带宽、低时延、广连接等特点让水利数据快速高效地传输成为可能,逐渐成…

ecs思考

VPC网络诊断,从router看起,连接公有子网路有一个默认,再新增一条指向igw路由;连接私有子网路由有一个默认,再新增一条指向NAT网关的路由,其中NAT网关一定要在公有子网中,否则,私有子…

Java 怎样实现代理模式,有什么优缺点

一、介绍 代理模式是一种常见的设计模式,它可以为其他对象提供一种代理以控制对这个对象的访问。代理对象具有与被代理对象相同的接口,客户端无需知道代理对象和被代理对象的区别。代理模式可以应用于各种不同的场景,例如远程代理、虚拟代理…

链表的添加修改删除操作

public class HeroNodeDemo {public static void main(String[] args) {HeroNode hero1 new HeroNode(1, "松江");HeroNode hero2 new HeroNode(2, "武松");HeroNode hero3 new HeroNode(3, "及时雨");HeroNode hero4 new HeroNode(4, "…

bootstrap-vue input框返回数字 大坑

前记 输入框需要返回数字而实际返回的是字符串。 type‘number’() 由于浏览器的限制,HTML5中的input type为number的表单控件只能输入数字,并且会使用浏览器内部的算法进行格式化。但是,无论如何,它的值始终是一个字符串。因此…

python基础语法(1)

基础语法⑴ 变量是什么变量的语法(1)定义变量(2)使用变量 变量的类型(1) 整数(2) 浮点数(3) 字符串(4) 布尔(5) 其他 为什么要有这么多类型?动态类型特性注释注释是什么注释的语法(1) 注释行(2) 文档字符串 注释的规范 变量是什么 给定四个数, 67.5, 89.0, 68.6, 98.5, 编写代…

【白嫖系列】教育邮箱申请最新专业绘图软件OriginPro(官方渠道)

🥑 Welcome to Aedream同学 s blog! 🥑 文章目录 预备简单介绍有效期与申请条件申请链接查看邮箱切换中文 预备 以edu结尾的邮箱,毕业也可使用校友邮箱等。 简单介绍 Origin是一款数据分析和绘图的软件,具备统计、峰值分析和曲线…

半导体运动台基于dsp+fpga+ad+endac的高速数据采集FPGA设计(二)

4 系统 FPGA 程序的设计 4.1 设计方法及逻辑设计概述 4.1.1 开发环境与设计流程 Quartus II 是 Altera 公司综合开发工具,它集成了 FPGA/CPLD 开发过程中所设计 的所有工具和第三方软件接口,支持多时钟分析, LogicLock 基于块的…