当我们需要对字符串进行动态修改时,这时String的功能就会受到限制,而StringBuffer类可以完成字符串的动态添加、
插入和替换等操作。
StringBuffer:线程程安全的可变和可写的字符序列。(注:线程安全在银行的网站,医疗平台等地方用途广泛,线程安全是一种同步的处理信息方式,但执行效率低;线程不安全是一种不同的处理信息方式,但执行效率高,通常被用于新闻网站,XXX论坛...)
StringBuffer和String的区别?
前者是一个可变的字符序列,后者是不可变的字符序列
如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存
而StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉
StringBuffer,String,StringBuilder的区别?
StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区.(两者都看做容器)
StringBuffer:线程安全的,同步的,执行效率低
StringBuilder:线程不安全的,不同步的,执行效率高,并且单线程中优先采用StringBuilder
StringBuffer 执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区
StringBuffer和数组的区别?
数组:它是可以存储多个数据的容器,并且多个数据的类型必须一致数组长度功能:length属性
StringBuffer:它是容器,它在缓冲区始终存储的只能字符串类型的数据获取缓冲区的长度:length()
一:StringBuffer的四种构造方法
StringBuffer( ) //无参构造的形式,初始容量16
StringBuffer(int capacity) //指定容量构造一个字符串缓冲区
StringBuffer(String str) //构造一个字符串缓冲区,并将其内容初始化为指定的 字符串内容
StringBuffer(CharSequence seq) //实际编程中很少用到。
当没有指定的缓冲区大小时,StringBuffer会自动分配16个附加字符的空间,这是因为再分配的时间代价很大,且频繁地再分配会产生内存碎片。它还可以向已存在的StringBuffer对象追加任何类型的数据,此时StringBuffer类向我们提供了相应的append()方法。
二:append()方法
StringBuffer append(boolean b)
StringBuffer append(String/boolean....) //实际开发中用的多
StringBuffer append(char c)
StringBuffer append(char[] str)
StringBuffer append(CharSequence s)
StringBuffer append(CharSequence s, int start, int end) ..........
还有很多方法,这些都是向字符串缓冲区“追加”元素,这个元素参数可以是布尔量、字符、字符数组、双精度数、浮点数、整型数、长整形数等对象类型的字符串。如果添加的内容超过缓冲区的长度,则Java自动进行扩充。StringBuffer的添加功能是在字符串缓冲区中追加数据(在末尾追加),并且返回字符串缓冲区本身。
对每一个StringBuffer的获取功能来说有两个重要的属性,分别是长度和容量。此时StringBuffer类向我们提供了相应的 length()方法和capacity()方法。
三:length()方法和capacity()方法。
public int length()返回长度
public int capacity()返回当前容量 (如果超过容量,系统自动分配(存储字符串的时候,英文的))
四:Insert()方法
Insert()方法主要用来将一个字符串插入另一个字符串,和append()方法一样,它也被重载而可以接收所有简单类型的值以及Object/String和CharSequence对象的引用。
它是先调用String类的valueOf()方法(注:valueOf()可将字符数组转化为字符串,可将所有Java中的简单类型转换成字符串)得到相应的字符串表达式,随后这个字符串被插入所有调用的StringBuffer对象中。
StringBuffer insert(int offset,String str) //将当前str字符串添加到指定位置处,它返回字符串缓冲区本身
StringBuffer insert(int offset,char c)
StringBuffer insert(int offset,char[] str).......
五:reverse() 方法
reverse() 为StringBuffer的反转功能,将StringBuffer对象内的字符串进行反转
public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
六:delete()方法
delete()方法StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
七:substring()方法
substring()方法是StringBuffer的截取功能
String substring(int start) //从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串。
八:replace()方法
replace()方法StringBuffer的替换功能。
public StringBuffer replace(int start,int end,String str)//从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身