StringBuffer 类,以及 StringBuilder 类

线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。

字符串缓冲区可以安全地被多个线程使用。 这些方法在必要时进行同步,以便任何特定实例上的所有操作都按照与所涉及的各个线程所执行的方法调用顺序一致的顺序发生。

StringBuffer的主要是appendinsert方法,它们被重载以便接受任何类型的数据。

每个字符串缓冲区都有一个容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,则会自动变大。

除非另有说明,否则将null参数传递给null中的构造函数或方法将导致抛出NullPointerException

1 public StringBuffer()     //构造一个没有字符的字符串缓冲区,初始容量为16个字符。
1 public StringBuffer(int capacity)构造一个没有字符的字符串缓冲区和指定的初始容量。
2 参数
3 capacity - 初始容量。
4 异常
5 NegativeArraySizeException - 如果 capacity参数小于 0 。 
1 public StringBuffer(String str)    //构造一个初始化为指定字符串内容的字符串缓冲区。 字符串缓冲区的初始容量为16加上字符串参数的长度。
2 参数
3 str - 缓冲区的初始内容。

方法:

1 append   //可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
1 insert(int offset, String str  )   // 在指定位置把任意数据插入到字符串缓冲区里面,并返回到字符串缓冲区本身

1 public StringBuffer deleteCharAt(int index) //删除char在这个序列中的指定位置。 该序列缩短了一个char 。
2 注意:如果给定索引处的字符是补充字符,则此方法不会删除整个字符。 如果需要的准确处理增补字符,确定数量char通过调用删除Character.charCount(thisSequence.codePointAt(index)) ,其中thisSequence是此序列。 
1 sb.delete(0, sb.length());  //清空缓存区,这样该区域还可以再使用
2
3 //不要用新建一个StringBuffer 对象的办法来清空缓存区,原来的区域会变成垃圾,浪费内存

StringBuffer 的替换功能 replace

        反转功能 reverse

        截取功能 substring ,截取从指定位置到结束位置,包括开始位置,不包括结束位置。

           注意:返回值不再是 StringBuffer本身,而是一个String



StringBuffer 和 String 对象相互转化:

  String 转化为 StringBuffer:

  ·StringBuffer 转换为 String:



之所以要用到StringBuffer 和 String 对象相互转化,是因为 一方面 StringBuffer 的拼接是同一个对象,字符串缓冲区内不断添加,不会产生垃圾;而 String的拼接是不断产生新的对象,常量池不断产生垃圾,浪费内存。而且StringBuffer的一些方法很好用,比如 reverse(),所以 可以先用StringBuffer操作,最后再转换成String对象。



 StringBuilder 类

String和StringBuffer作为形参传递:

第二个 syso 输出的 仍然是 ”heima“

这里会输出 heimaitcast

原文地址:https://www.cnblogs.com/gaoyang666/p/11135513.html

时间: 2024-10-08 09:21:54

StringBuffer 类,以及 StringBuilder 类的相关文章

JavaSE入门学习29:Java常用类之StringBuffer类和StringBuilder类

一StringBuilder类 (1)认识StringBuilder类 在Java中,除了可以使用String类来存储字符串,还可以使用StringBuilder类或 StringBuffer类存储字符串,在需 要频繁对字符串进行修改操作时使用StringBuilder的效率比String要高. String 类具有是不可变性.如: 运行结果: 从运行结果中我们可以看到,程序运行时会额外创建一个对象,保存 "helloworld".当频繁操作字符串时,就会额 外产生很多临时变量.使用S

一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对比

本文主要介绍String类.StringBuffer类.StringBuilder类的区别  : 一.概述 (一)String 字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象. (二)StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同. 区别在于StringBuffer每个方法中前面添加了"synchronized",保证其是线程安全的. (三)StringBuilder 字符串可变量,

一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照

本文主要介绍String类.StringBuffer类.StringBuilder类的差别  : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作都会创建一个新的字符串对象. (二)StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法全然同样. 差别在于StringBuffer每一个方法中前面加入了"synchronized",保证其是线程安全的. (三)StringBuilder 字符串可

Java中String类StringBuffer类和StringBuilder类的区别

首先阐述String类和StringBuffer类的区别,String类是常量,不能添加,而StringBuffer则是一个字符缓冲区,可以往里面添加字符串.比如说: <span style="font-size:18px;">String str = "helloworld"; str += "welcome";</span> 这里其实过程是这样的:生成了String对象 "helloworld" 引

Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)

1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) { getCount("IamHandsome666"); } public static void getCount(String str) { int upper = 0; int lower = 0; int digit = 0; for (int i = 0; i < str

.Net的String类与StringBuilder类操作

关于.NET提供了许多可以直接使用的类代码,常用的包括Convert类.String类和StringBuilder类.DateTimel类和TimeSpan类.Math类等等. 其中Convert类提供的方法都是静态方法,主要用于数据类型的转换: 例如: 字符串数据类型  -----> 整形 string str ="123"; int Getstr = Convert.Int32(str); 但要注意类型转换的取值范围. 当然DateTime类和TimeSpan类是针对时间这一

java中String类、StringBuilder类和StringBuffer类详解

本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利 正文: 探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得

Java基础之String类、StringBuffer类、StringBuilder类

String类对象有两种实例化方法 直接赋值:只开辟一块对内存空间,可以自动入池. 构造方法:开辟两块[堆]内存空间,不会自动入池,使用intern()方法手动入池. 任何一个字符串都是String类的匿名对象. 字符串一旦声明则不可以改变,可以改变的只是String类对象的引用. String类可以使用 + 进行字符串的连接操作 StringBuffer类的内容可以进行修改,而String类的内容是不可以修改的. 在String类里面,提供了一个与StringBuffer类比较的方法: pub

可变的StringBuffer类和StringBuilder类

基本概述 由于String类描述字符序列上是不可改变的,因此描述多个类似的字符串需要单独保存,此时内存空间消耗比较大. 为了节省内存空间直接对对象字符序列本身进行改变,则使用 StrungBuffer和StringBuilder. 1. StringBuffer属于线程安全的类,效率比较低2. StringBuilder属于非线程安全的类,效率比较高,推介使用 常用方法 StringBuilder(String str) - 根据字符串来构造对象 - 初始容量为:16 + 字符串参数的长度 -

C#数据结构和算法-字符串、String 类和StringBuilder类

*本文为摘抄笔记* Preface当程序需要对String对象进行许多改变时会用到StringBuilder类.因为字符串和String对象都是不可改变的,而StringBuilder对象则是易变的.String类不可变,就意味着每次对象进行改变时都需要创建一个新的对象副本.如果在创建长的字符串,或者是对相同对象进行许多改变,那么就应该用StringBuilder类来代替.StringBuilder对象是可变的,性能会更好. 字符串是字符的序列,可以包含字母.数字和其他符号.C#语言中,用双引号