String,StringBuffer和StringBuilder的区别?

1.所有语言对字符串的底层实现都是字符数组,数组最大的缺陷就是长度固定,因此字符串的常量是不可以改变的。

String str = "hello" ;
str = str + " world" ;
str += "!!!" ;
System.out.println(str); // hello world!!!
  • 字符串常量是str ,字符串对象是 “hello” 这些值,以上变换的是字符串的对象,而不是字符串的常量str。
  • 因此我们总结为:任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。

2.因此Java里面为了方便字符串的修改,提供StringBuffer类
我们来看一段代码:

public class stringBufferTest {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer();
            sb.append("Hello").append("World");
            test(sb);
            System.out.println(sb);
        }
        public static void test(StringBuffer temp) {
            temp.append("\n").append("你好 世界");
        }
    }

输出:

HelloWorld
你好 世界
  • 需要指出的是:在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为append()方法:

StringBuilder也可以进行字符串的修改,但它采用异步处理,是一个线程不安全的操作。
请看代码:

public class stringBufferTest {
        public static void main(String[] args) {
            StringBuffer sb = new StringBuffer();
            StringBuilder st = new StringBuilder();
            st.append("Hello").append("World");
            test1(st);
            System.out.println(st);
            sb.append("Hello").append("wang");
            test(sb);
            System.out.println(sb);
        }
        public static void test(StringBuffer temp) {
            temp.append("\n").append("你好 世界");
        }
        public static void test1(StringBuilder temp) {
        temp.append("\n").append("你好 wang");
    }
    }

执行结果:

HelloWorld
你好 wang
Hellowang
你好 世界

异步操作与同步操作的相比:异步操作速度快,但线程不安全。

通过以上的分析,我们可以得出String,StringBuffer和stringBuilder区别是:

  • String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
  • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值