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未采用同步处理,属于线程不安全操作

目录
相关文章
|
13天前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
Java 中的 String Pool 简介
|
19天前
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
java 为什么 String 在 java 中是不可变的?
|
1月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
49 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
13天前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
|
29天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
45 8
|
29天前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
54 7
|
29天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
64 1
|
1月前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
119 4