String类型的对象一旦创建,其长度和内容是不可以改变的。为了便于对字符串进行修改,Java 8 提供了StringBuffer类。该类的构造方法如表5-4所示。
表5-4 StringBuffer类构造方法表
StringBuffer类的构造方法示例代码如下:
上述代码的运行结果如下:
StringBuffer类的对象不仅有长度length,还有容量capacity。其中,长度是指StringBuffer类对象中字符的个数,而容量是指StringBuffer类对象中可以容纳的字符个数,而且StringBuffer类对象的容量会随着长度的增加而没有规律地增大。
第4行代码创建了不带任何字符的StringBuffer对象,并将其赋值给StringBuffer类的引用变量s1,第7 行代码输出s1 的容量为16,第8 行输出s1 的长度为0。当不指定String Buffer对象的容量时,默认是16,故第7行代码输出16。
第5行代码创建了初始容量为16的StringBuffer类对象,并将其赋值给StringBuffer类的引用变量s2,第9行代码输出s2的容量为16,第10行代码输出s2的长度为0。
第6行代码创建了初始值为“Java”的StringBuffer对象,并将其赋值给StringBuffer类的引用变量s3,第11行代码输出s3的容量为20,第12行代码输出s3的长度为4。
StringBuffer类的常用方法如表5-5所示。
表5-5 StringBuffer类常用方法表
StringBuffer类的构造方法和常用方法示例代码如下:
上述代码的运行结果如下:
第4行代码创建了不带任何字符的StringBuffer对象,并将其赋值给StringBuffer类的引用变量s1。
第5行代码调用toString方法,该方法返回s1对象中的所有字符,因为s1中没有字符,故输出空。(www.xing528.com)
第6行代码通过append方法,向s1中追加“Java”字符串。
第7行代码与第5行代码完全等价,当输出一个对象时,默认调用toString方法,故第7行输出“Java”。
第8行代码通过insert方法,从s1的0索引处添加“Loveo”字符串。
第9行代码输出s1中的字符串为:LoveoJava。
第10行代码删除s1中索引为4的字符,即o。
第11行代码输出s1中的字符串为:LoveJava。
第12行代码删除s1中索引为0~3的字符串。
第13行代码输出s1中的字符串为:Java。
第14行代码将s1中0~3索引处的字符串替换为:avaj。
第15行代码输出s1中的字符串为:avaj。
第16行代码将s1索引为3的字符设置为:J。
第17行代码输出s1中的字符串为:avaJ。
第18行代码将s1中的字符串倒置。
第19行代码输出s1中的字符串为:Java。
从运行结果可以看出,从程序开始到程序结束,都只有一个StringBuffer类的引用对象s1,所有的增、改操作都是在s1上做的修改,不会产生新的StringBuffer类的对象。
StringBuffer类与String类的区别在哪里呢?
(1)该类与String类的最大区别在于它的内容和长度都是可以改变的。StringBuffer类类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。在操作字符串时,如果该字符串仅用于表示数据类型,用String类即可。但是如果需要对字符串中的字符进行增删改操作时,则使用StringBuffer类。
(2)String类重写了Object类的equals方法,而StringBuffer类却没有。
(3)String类的对象可以用操作符“+”进行连接,而StringBuffer类对象却不能。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。