String、StringBuffer、StringBuilder有什么不同?

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以保证线程的安全。

你可能感兴趣的:(每天一道Java面试题,java)