1 StringBuffer 和 StringBuilder
String类在所有项目开发中是一定会使用到的类,但是这个类有以下特点:
1 字符串的内容一旦声明则不可改变
2 字符串常量全部都是String的匿名对象
3 可以直接赋值使用
String虽然使用起来很方便,但是缺陷是内容不可修改:
范例:观察修改String内容
public static void main(String[] args) {
String str="hello";
fun(str);
System.out.println(str); }
public static void fun(String str) {
str="world"; } |
通过以上的代码发现String字符串是修改不了的内容的,如果修改了内容只是字符串的拼接会产生大量的垃圾空间
如果想要在频繁的修改字符串的内容则JDK 为用户提供了StringBuilder 或者 StringBuffer 类来帮助用户实现频繁修改字符串的功能
该类的定义如下:StringBuffer
public final class StringBuffer extends Object implements Serializable, CharSequence |
构造方法:
1 public StringBuffer() ; 默认构造一个StringBuffer 会开辟16字符空间
2 ublic StringBuffer(String str);构造StringBuffer 可以直接给定字符串
普通方法
1 public StringBuffer append(数据类型 数据) 添加内容到StringBuffer中
2 public String toString(); 把StringBuffer转换为String
范例:使用StringBuffer
public static void main(String[] args) {
StringBuffer sbf=new StringBuffer(); //空构造
sbf.append("hello").append("java").append("");
fun(sbf);
System.out.println(sbf.toString());
}
public static void fun(StringBuffer sbf) {
sbf.append("world"); } |
在以上案例中存在两种方式赋值
1 构造方法直接给定 内容
2 通过 append()可以可定内容 该方法可以一致返回StringBuffer 并且再次调用append()
3 toString方法可以把StringBuffer 转换为String
StringBuilder
功能上和StringBuffer 完全一样,但是他们的区别如下:
StringBuffer 线程安全 同步处理 效率低
StringBuilder 非线程安全 异步护理 效率高
范例:用StringBuilder实现
public static void main(String[] args) {
StringBuilder sbf=new StringBuilder(); //空构造
sbf.append("hello").append("java").append("");
fun(sbf);
System.out.println(sbf.toString());
}
public static void fun(StringBuilder sbf) {
sbf.append("world"); } |
对于StringBuffer 也提供了相应的操作方法:
1 public StringBuffer reverse() 字符串反转
System.out.println(sbf.reverse().toString()); |
2 public StringBuffer delete(int start, int end) ;删除指定的字符串
System.out.println(sbf.delete(0, 4).toString()); |
在项目开发中 首先使用String类来描述字符串,但是如果出现需要频繁修改字符串的需求则使用StringBuilder 或者StringBuffer类