参考链接: Java中的String vs StringBuilder vs StringBuffer
下述文章资料来源于: W3CSCHOOL离线版的Java教程 Java JDK 6.0开发手册 Java开发从入门到精通(陈小玉版)
StringBuffer和String选择的异同 StringBuffer在进行字符串处理时,不生成新的对象,在内存的使用上要优于String类; 二者有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别
Java StringBuffer和StringBuilder类 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder类在Java 5中被提出,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据)。
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
在Java中规定,一旦声明String的内容就不可再改变,如果要改变,改变的肯定是String的引用地址。 如果一个字符串需要经常被改变,则必须使用 StringBuffer类。 在String类中可以通过“+”来连接字符串,在StringBuffer中只能使用方法append()来连接字符串。
public class Test{
public static void main(String args[]){
StringBuffer sBuffer = new StringBuffer(" test");
sBuffer.append(" String Buffer");
System.out.println(sBuffer);
}
}
以上实例编译运行结果如下:
test String Buffer
StringBuffer 方法 以下是StringBuffer类支持的主要方法:
序号方法描述1public StringBuffer append(String s) 将指定的字符串追加到此字符序列。2public StringBuffer reverse() 将此字符序列用其反转形式取代。3public delete(int start, int end)4public insert(int offset, int i) 将 int 参数的字符串表示形式插入此序列中。5replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。
下面的列表里的方法和String类的方法类似: 使用append()来连接字符串
public class StringBufferT1{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ") ; // 向StringBuffer中添加内容
buf.append("World").append("!!!") ; // 可以连续调用append()方法
buf.append("\n") ; // 添加一个转义字符
buf.append("数字 = ").append(1).append("\n") ; // 添加数字
buf.append("字符 = ").append('C').append("\n"); // 添加字符
buf.append("布尔 = ").append(true) ; // 添加布尔值
System.out.println(buf) ; // 直接输出对象,调用toString()
}
};
在任意处为StringBuffer添加内容
public class StringBufferT3{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("World!!") ; // 添加内容
buf.insert(0,"Hello ") ; // 在第一个内容之前添加内容
System.out.println(buf) ;
buf.insert(buf.length(),"MM~") ; // 在最后添加内容
System.out.println(buf) ;
}
};
在任意处为StringBuffer添加内容
public class StringBufferT5{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容
buf.replace(6,11,"AAA") ; // 将world的内容替换
System.out.println("内容替换之后的结果:" + buf) ; // 输出内容
}
};
从StringBuffer中删除指定范围的字符串
public class StringBufferT7{
public static void main(String args[]){
StringBuffer buf = new StringBuffer() ; // 声明StringBuffer对象
buf.append("Hello ").append("World!!") ; // 向StringBuffer添加内容
buf.replace(6,11,"AAA") ; // 将world的内容替换
String str = buf.delete(6,15).toString() ; // 删除指定范围中的内容
System.out.println("删除之后的结果:" + str) ; // 输出内容
}
};