- 和String类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
- StringBuffer线程安全,而 StringBuilder 方法不是线程安全的(不能同步访问)。 StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰
*单线程程序下, StringBuilder 相较于 StringBuffer 有速度优势,它不需要加锁,不具备多线程安全;而StringBuffer则每次都需要判断锁,效率相对更低所以多数情况下建议使用 StringBuilder 类。运行速度快慢为:StringBuilder > StringBuffer > String
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
Java String类
- String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。String类有11钟构造方法,比如可以提供一个字符数组参数初始化字符串。
- 用于获取有关对象的信息的方法称为访问器方法。
返回字符串对象包含的字符数:length()
方法 - 连接两个字符串的方法:
string1.concat(string2);
更常用的是使用’+'操作符来连接字符串 - 输出格式化数字可以使用 printf() 和 format() 方法。String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。
- String 类支持的方法可参看 Java String API 文档:http://www.runoob.com/manual/jdk1.6/java/lang/String.html
StringBuilder方法
-
字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生
-
创建Stringbuilder对象
StringBuilder strB = new StringBuilder();
-
方法,和后面的StringBuffer类似
-
append(String str)/append(Char c):字符串连接
System.out.println(“StringBuilder:”+strB.append(“ch”).append(“111”).append(‘c’));
//return “StringBuilder:ch111c” -
toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println(“String:”+strB.toString());
//return “String:ch111c” -
appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
System.out.println(“StringBuilder.appendCodePoint:”+strB.appendCodePoint(2));
//return “StringBuilder.appendCodePoint:ch111c” -
setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, ‘d’);
System.out.println(“StringBuilder.setCharAt:” + strB);
//return “StringBuilder.setCharAt:chd11c” -
insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
System.out.println(“StringBuilder.insertString:”+ strB.insert(2, “LS”));
//return “StringBuilder.insertString:chLSd11c”
System.out.println(“StringBuilder.insertChar:”+ strB.insert(2, ‘L’));
//return “StringBuilder.insertChar:chLLSd11c” -
delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println(“StringBuilder.delete:”+ strB.delete(2, 4));
//return “StringBuilder.delete:chSd11c”
StringBuffer方法
更详细可参考:https://www.cnblogs.com/skywang12345/p/string03.html
- StringBuffer对象和String对象之间的互转的代码如下:
String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
String s1 = sb1.toString(); //StringBuffer转换为String
- StringBuffer初始化及扩容机制
-
StringBuffer()的初始容量可以容纳16个字符,当该对象的实体存放的字符的长度大于16时,实体容量就自动增加。StringBuffer对象可以通过length()方法获取实体中存放的字符序列长度,通过capacity()方法来获取当前实体的实际容量。
-
StringBuffer(int size)可以指定分配给该对象的实体的初始容量参数为参数size指定的字符个数。当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量就自动的增加。以便存放所增加的字符。
-
StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列长度大于size个字符时,实体的容量自动的增加,以便存放所增加的字符。
- 方法:偏重于对于字符串的变化,例如追加、插入和删除等
- append方法:追加内容到当前StringBuffer对象的末尾,类似于字符串的连接
- deleteCharAt方法:该方法的作用是删除指定位置的字符
- insert方法:该方法的作用是在StringBuffer对象中插入内容
- reverse方法:该方法的作用是将StringBuffer对象中的内容反转。
- setCharAt方法:该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。
- trimToSize方法:该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
- replace方法
- toString方法
public StringBuffer append(boolean b)
//
public StringBuffer deleteCharAt(int index)
//
public StringBuffer delete(int start,int end)
//
public StringBuffer insert(int offset, boolean b)
//
public StringBuffer reverse()
//
public void setCharAt(int index, char ch)
//
public void trimToSize()
//
synchronized StringBuffer replace(int start, int end, String string)