Java StringBuffer和StringBuilder类

简介: Java StringBuffer和StringBuilder类

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。与String不同的是,StringBuffer和StringBuilder是对字符串本身进行修改,并且不产生新的对象,而String是产生新的字符串进行修改。

StringBuilder常用方法

由于StringBuffer的方法和StringBuilder方法大部分是相同的,所以我们在这就先介绍StringBuilder;

image.png

public static void main(String[] args) {
  StringBuilder sb1 = new StringBuilder("Hello");
  StringBuilder sb2 = sb1;
  sb1.append(' '); // Hello
  sb1.append("world"); // Hello world
  sb1.append(123); // Hello world123
  System.out.println(sb1); // Hello world123
  System.out.println(sb1 == sb2); // true
  System.out.println(sb1.charAt(0)); // 获取0号位上的字符 H
  System.out.println(sb1.length()); // 获取字符串的有效长度14
  System.out.println(sb1.capacity()); // 获取底层数组的总大小
  sb1.setCharAt(0, 'h'); // 设置任意位置的字符 hello world123
  sb1.insert(0, "Yes"); // Yeshello world123
  System.out.println(sb1);
  System.out.println(sb1.indexOf("hello")); // 获取Hello第一次出现的位置
  System.out.println(sb1.lastIndexOf("hello")); // 获取hello最后一次出现的位置
  sb1.deleteCharAt(0); // 删除首字符
  sb1.delete(0,5); // 删除[0, 5)范围内的字符
  String str = sb1.substring(0, 5); // 截取[0, 5)区间中的字符以String的方式返回
  System.out.println(str);
  sb1.reverse(); // 字符串逆转
  str = sb1.toString(); // 将StringBuffer以String的方式返回
  System.out.println(str);
}

StringBuilder sb1 = new StringBuilder(“hello”);

sb1.append(’ ');

sb1.append(“world”);

sb1.append(123);

StringBuilder sb2 = sb1;

System.out.println(sb1 == sb2);

==比较的是:是否引用同一个对象

设置任意位置的字符

sb1.setCharAt(0, ‘h’);

sb1.insert(0, “Yes”);

删除首字符
sb1.deleteCharAt(0);

删除[0, 5)范围内的字符

sb1.delete(0,5);

截取[0, 5)区间中的字符以String的方式返回
String str = sb1.substring(0, 5);
System.out.println(str);

字符串逆转

sb1.reverse();

从上述例子可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。

注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

1.String变为StringBuilder: 利用StringBuilder的构造方法或append()方法

2.StringBuilder变为String: 调用toString()方法。

String、StringBuffer、StringBuilder的区别

1.String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.

2.StringBuffer与StringBuilder大部分功能是相似的

3.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

目录
相关文章
|
9天前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
162 101
|
9天前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
179 100
|
2月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
296 120
|
2月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
2月前
|
存储 安全 Java
Java集合框架(一):List接口及其实现类剖析
本文深入解析Java中List集合的实现原理,涵盖ArrayList的动态数组机制、LinkedList的链表结构、Vector与Stack的线程安全性及其不推荐使用的原因,对比了不同实现的性能与适用场景,帮助开发者根据实际需求选择合适的List实现。
|
3月前
|
Java API
深入解析Java API中Object类的功能
了解和合理运用 Object类的这些方法,对于编写可靠和高效的Java应用程序至关重要。它们构成了Java对象行为的基础,影响着对象的创建、识别、表达和并发控制。
65 0
|
4月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
81 0
|
7月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
148 11
|
7月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
158 9