【基础】Java的StringBuffer 和 StringBuilder 类操作,你学会了吗?

简介: 【基础】Java的StringBuffer 和 StringBuilder 类操作,你学会了吗?

前言


  上一文熟悉了Java的String类操作,本文针对于String类型相似的StringBuffer和 StringBuilder类进行操作。当然,使用StringBuffer和 StringBuilder是对经常进行更新修改而不需要创建新的对象。下面开始介绍。



image.png

image.png


StringBuffer


  StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。


优点


  • 可变长
  • 线程安全的
  • 多线程操作


缺点


  • StringBuffer效率比StringBuilder效率低。


StringBuilder


  StringBuilder是可变类,和线程不安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuilder对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。


优点


  • 可变长
  • 线程不安全的
  • 单线程操作


缺点


  • StringBuilder效率StringBuffer比效率低。


StringBuffer常用方法


append

  append(String s)将指定的字符串追加到此字符序列。


reverse

  reverse()将此字符序列用其反转形式取代。


delete

  delete(int start, int end)移除此序列的子字符串中的字符。


insert(int offset, int i)

  insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中。


insert(int offset, String str)

  insert(int offset, String str)将 str 参数的字符串插入此序列中。


replace(int start, int end, String str)

  replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符。


StringBuffer常用方法


capacity()

  int capacity()返回当前容量,类型为int值。


charAt(int index)

  char charAt(int index)返回此序列中指定索引处的char值。


ensureCapacity(int minimumCapacity)

  ensureCapacity(int minimumCapacity)确保容量至少等于指定的最小值。


getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

  getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此序列复制到目标字符数组 dst,无返回值。


indexOf(String str)

  int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引。


indexOf(String str, int fromIndex)

  int indexOf(String str, int fromIndex)从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。


lastIndexOf(String str)

  int lastIndexOf(String str)返回最右边出现的指定子字符串在此字符串中的索引。


lastIndexOf(String str, int fromIndex)

  int lastIndexOf(String str, int fromIndex)返回 String 对象中子字符串最后出现的位置。


length()

  int length()返回长度(字符数)。


setCharAt(int index, char ch)

  void setCharAt(int index, char ch)将给定索引处的字符设置为 ch。


setLength(int newLength)

  void setLength(int newLength)设置字符序列的长度。


subSequence(int start, int end)

  CharSequence subSequence(int start, int end)返回一个新的字符序列,该字符序列是此序列的子序列。


substring(int start)

  String substring(int start)返回一个新的 String,它包含此字符序列当前所包含的字符子序列。


substring(int start, int end)

  String substring(int start, int end)返回一个新的 String,它包含此序列当前所包含的字符子序列。


toString()

  String toString()返回此序列中数据的字符串表示形式。


总结


  • String:不可变字符序列
  • Stringbuffer:可变字符序列、效率低、线程安全
  • String Builder(JDK1.5):可变字符序列、效率高、线程不安全

  Stringbuilder和 String Buffer非常类似,均代表可变的字符序列,而且方法也一样。多次执行这些改变串内容的操作,String会导致大量副本字符串对象存留在内存中,降低效率,如果这样的操作放到循环中,会极大影响程序的性能,建议使用Stringbuilder和 String Buffer。


目录
相关文章
|
7天前
|
安全 Java 编译器
JAVA泛型类的使用(二)
接上一篇继续介绍Java泛型的高级特性。3. **编译时类型检查**:尽管运行时发生类型擦除,编译器会在编译阶段进行严格类型检查,并允许通过`extends`关键字对类型参数进行约束,确保类型安全。4. **桥方法**:为保证多态性,编译器会生成桥方法以处理类型擦除带来的问题。5. **运行时获取泛型信息**:虽然泛型信息在运行时被擦除,但可通过反射机制部分恢复这些信息,例如使用`ParameterizedType`来获取泛型参数的实际类型。
|
7天前
|
安全 Java 编译器
JAVA泛型类的使用(一)
Java 泛型类是 JDK 5.0 引入的重要特性,提供编译时类型安全检测,增强代码可读性和可维护性。通过定义泛型类如 `Box<T>`,允许使用类型参数。其核心原理是类型擦除,即编译时将泛型类型替换为边界类型(通常是 Object),确保与旧版本兼容并优化性能。例如,`Box<T>` 编译后变为 `Box<Object>`,从而实现无缝交互和减少内存开销。
|
3月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
200 58
|
2月前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
Java 中的 String Pool 简介
|
2月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
java 为什么 String 在 java 中是不可变的?
|
3月前
|
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'.
333 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
2月前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
|
3月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
104 8
|
3月前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
158 7