java中String,StringBuffer,StringBuilder的区别

                            java中String,StringBuffer,StringBuilder的区别

我们简单了解下这三种数据结构。

String:字符串常量(线程安全)

StringBuffer:字符串变量(线程安全)

StringBuilder:字符串变量(线程不安全)

这里string是字符串常量,我们单个讨论。我们来看看两种声明字符串的方式。

这两种数据虽然相同,但是调用==判断的时候却不相同。因为String a="123"的时候,直接在编译的时候就确定好了字符

串的值。123存储在方法区的常量池中。而String b=new String("123")是在运行的时候在堆区开辟了空间,存储了字符串

123。如果我们添加语句b="100"。这时候是在堆区重新new了个空间,重新赋值。我们来看看String类的源码。

string是由char[]组成的。当改变字符串的时候是在堆区重新申请地址然后赋值。

每次改变string的值的时候都是在新的地址上写入。所以是线程安全的。

stringBuffer是字符串变量,先来看下实现源码:

当改变Stringbuffert的值的时候是调用父类的append函数,对字符串进行改变。而且用了synchronized修饰,当多个线

程对StringBuffer的值进行操作的时候,是线程安全的。

StringBuilder也是字符串变量,实现源码:

当改变StringBuilder的值的时候是调用父类的append函数,但是没有用synchronized关键字修饰,所以线程不安全。

在对字符串改变的性能来说,StringBuilder的性能比StringBuffer稍高一些。但是性能差别不大。尤其是字符串长度较

长的时候,性能差别更小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值