StringBuffer是线程安全的可变字符串
1. StringBuffer与String的区别
StringBuffer的长度和内容是可变的,而String是不变的。
如果用StringBuffer做字符串的拼接,不会浪费太多的资源。
2. StringBuilder提供一个与StringBuffer兼容的API,但不保证同步,线程不安全,该类被设计用作StringBuffer的一个简单替换,用在字符串缓冲区被单个线程使用的时候,要比StringBuffer更快。
3. String的内容是不可变的,而StringBuffer、StringBuilder都是内容可变的。
4. StringBuffer是同步的,数据安全、多线程、线程安全,但效率低;StringBuilder是不同步的,数据不安全,单线程线程安全,多线程不安全,效率高。
5. StringBuffer和数组的区别:二者都可看作是一个容器,装其他的数据;但是呢,StringBuffer的数据最终是一个字符串的数据;而数组可以放置多种类型的数据,但必须是同一种数据类型。
6. 形式参数问题:
String作为参数传递,效果和基本数据类型作为参数传递是一样的。
StringBuffer作为参数传递,效果等同与引用类型。
7. 形式参数
基本类型:形式参数的改变不影响实际参数。
应用类型:形式参数的改变影响实际参数。
示例代码:
package cn.lgt.stringbuffermethods;
public class StringBufferDemo {
public static void main(String[] args) {
System.out.println("StringBufferDemo");
System.out.println("------------------");
//StringBuffer类的构造方法
//StringBufferConstructor.stringBufferConstructor();
//StringBuffer的添加功能(方法)
//StringBufferAddMethods.stringBufferAddMethods();
//StringBuffer的删除功能(方法)
//StringBufferDeleteMethods.stringBufferDeleteMethods();
//StringBuffer的替换功能(方法)
//StringBufferChangeMethods.stringBufferChangeMethods();
//StringBuffer的反转功能(方法)
//StringBufferReverse.stringBufferReverse();
//StringBuffer的截取功能(方法)
//StringBufferSubstring.stringBufferSubstring();
//StringBuffer与String之间的相互转换
StringBufferandString.stringBufferandString();
}
}
StringBuffer的构造方法
package cn.lgt.stringbuffermethods;
public class StringBufferConstructor {
public static void stringBufferConstructor(){
/**
* 1. StringBuffer()
* 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
*/
StringBuffer sb1 = new StringBuffer();
sb1.append("hello");
System.out.println("sb1 = " + sb1);
StringBuffer sb2 = new StringBuffer("helloworld");
System.out.println("sb2 = " + sb2);
StringBuffer sb3 = new StringBuffer(30);
sb3.append("helloworldandjava");
System.out.println("sb3 = " + sb3);
}
}
StringBuffer的添加功能(方法)
package cn.lgt.stringbuffermethods;
public class StringBufferAddMethods {
public static void stringBufferAddMethods(){
//StringBuffer的添加功能(方法)
StringBuffer sb1 = new StringBuffer();
sb1.append(10);
System.out.println("sb1 = " + sb1);
//插入功能(方法)
StringBuffer sb2 = new StringBuffer();
sb2.append("java");
System.out.println("sb2 = " + sb2);
//sb2.insert(1, 'x');//插入字符
sb2.insert(0, "hello");//插入字符串
System.out.println("sb2 = " + sb2);
//添加功能的链式编程
StringBuffer sb3 = new StringBuffer();
System.out.println("sb3 = " + sb3);//空的内容
sb3.append(1).append(23).append('x').append("over!");
System.out.println("sb3 = " + sb3);
}
}
StringBuffer的删除功能(方法)
package cn.lgt.stringbuffermethods;
public class StringBufferDeleteMethods {
public static void stringBufferDeleteMethods(){
//StringBuffer的删除功能
StringBuffer sb1 = new StringBuffer();
sb1.append("hellojavaSE");
System.out.println("sb1 = " + sb1);
//删除一个指定索引位置的字符
sb1.deleteCharAt(sb1.length()-1);
System.out.println("sb1 = " + sb1);
StringBuffer sb2 = new StringBuffer();
System.out.println("sb2 = " + sb2);
sb2.append("StringBuffer_java");
//delete(int start, int end);//其中删除中包含start,不包含end
sb2.delete(2, 6);
System.out.println("sb2 = " + sb2);
}
}
StringBuffer的替换功能(方法)
package cn.lgt.stringbuffermethods;
public class StringBufferChangeMethods {
public static void stringBufferChangeMethods(){
//StringBuffer的替换功能replace()
StringBuffer sb1 = new StringBuffer();
sb1.append("hellojavaworld");
System.out.println("sb1 = " + sb1);
//replace(int start, int end, String str);//包含start, 不包含end
sb1.replace(0, 1, "other");
System.out.println("sb1 = " + sb1);
}
}
StringBuffer的反转功能(方法)
package cn.lgt.stringbuffermethods;
public class StringBufferReverse {
public static void stringBufferReverse(){
//StringBuffer的反转功能(方法)
StringBuffer sb1 = new StringBuffer();
sb1.append("helloworldjava");
System.out.println("sb1 = " + sb1);
//逆序
sb1.reverse();
System.out.println("sb1 = " + sb1);
}
}
StringBuffer的截取功能(方法)
package cn.lgt.stringbuffermethods;
public class StringBufferSubstring {
public static void stringBufferSubstring(){
StringBuffer sb1 = new StringBuffer();
sb1.append("helloworldjava");
System.out.println("sb1 = " + sb1);
//StringBuffer的截取功能(方法)
//public String substring(int start);
//其中包括start,不包括end
//public String sbustring(int start, int end);
//返回值类型为String类型,而不是StringBuffer类型,原StringBuffer类型的对象不变
String s1 = sb1.substring(1);
System.out.println("sb1 = " + sb1);
System.out.println("s1 = " + s1);
String s2 = sb1.substring(2, 10);
System.out.println("s2 = " + s2);
}
}
StringBuffer与String的相互转换
package cn.lgt.stringbuffermethods;
public class StringBufferandString {
public static void stringBufferandString(){
//StringBuffer和String之间的相互转换
/**
* 1. String 转换为StringBuffer
* a. 通过构造方法转换
* b. 通过append()方法转换
* 2. StringBuffer转换为String
* a. 通过构造方法转换
* b. 通过toString()方法转换
*/
//1. String 转换为StringBuffer
//a. 通过构造方法转换
String s1 = "java";
StringBuffer sb1 = new StringBuffer(s1);
System.out.println("s1 = " + s1);
System.out.println("sb1 = " + sb1);
System.out.println("--------------------");
//String 转换为StringBuffer
//b. 通过append()方法转换
String s2 = "hello";
StringBuffer sb2 = new StringBuffer();
sb2.append(s2);
System.out.println("s2 = " + s2);
System.out.println("sb2 = " + sb2);
System.out.println("--------------------");
//2. StringBuffer转换为String
//a. 通过构造方法转换
StringBuffer sb3 = new StringBuffer().append("world");
String s3 = new String(sb3);
System.out.println("sb3 = " + sb3);
System.out.println("s3 = " + s3);
System.out.println("--------------------");
//2. StringBuffer转换为String
//b. 通过toString()方法转换
StringBuffer sb4 = new StringBuffer().append("csdn");
String s4 = sb4.toString();
System.out.println("sb4 = " + sb4);
System.out.println("s4 = " + s4);
}
}