String、StringBuffer、StringBuilder三者的有不同
String是final修饰的,不可变的,每次操作都会产生新的String对象
StringBuffer和StringBuilder和String不同的是,每次操作都是在原对象上修改,不产生新的String对象
Demo1:
public class StringBuilderDemo1 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder(10);
sb.append("Study。。");
System.out.println(sb);
System.out.println("****分割线****");
sb.append("java");
System.out.println(sb);
sb.insert(11,"!!");
System.out.println(sb);
sb.delete(5,7);
System.out.println(sb);
}
}
//编译结果:
/**
原String对象操作:Study。。
****分割线****
在原来String对象操作:原String对象操作:Study。。java
原String对象操作!!:Study。。java
**/
Demo2:
/**
* 应用程序要求线程安全的情况下需要使用StringBuffer类
*/
public class StringBufferDemo1 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("Study StringBuffer:");
sb.append("i am ");
sb.append("hanppy");
sb.append("!!!");
System.out.println(sb);
}
}
StringBuffer的常用方法:
append(String s):自定或指定字符串添加到此字符序列中
reverse():反转形式取代
delete(int start,int end):删除范围内的的字符
insert(int num,int i ):插入字符串
replace(int start,int end,String string):替换指定字符
StringBuffer是synchronized修饰的,用于线程安全(变量同步)
StringBuffer是线程安全的,StringBuilder是线程不安全的
String是final修饰的,长度是不可变的,而StringBuffer长度是可变的,可调用Stringuffer的append方法改变StringBuffer长度。
三者的性能:StringBuilder>StringBuffer>String
StringBuffer和StringBuilder两者根据性能来说优先使用StringBuilder,而在多线程中需要使用同一变量时使用StringBuffer以保证线程的安全。