String和Stringbuilder.以及StringBuffer的

1.从运行速度上面来说,string<Stringbuffer<Stringbuilder;

String为字符串常量;而其他两者为字符串变量;
例如程序:

String str=abc;
System.out.println(str);
str=str+"de";
System.out.println(str);

通过输出你会发现,第一个strabc,第二次输出为abcde;第一眼看上去好像str的值改变,但是你看到的是假象(眼见也不一定是真的),这涉及到java的回收机制,前面提到String数据一旦确定就不能更改,在第三行中其实是java虚拟机给你新new了一个对象,相当于重新创建了一个str。而原来的str被Java虚拟机的回收机制给回收了。
而为什么我说另外两种比string快呢,因为这两种是直接对对象2进行更改的,而并不需要new一个对象 ,也不必对之前对象进行回收。(为什么说Stringbuilder比Stringbuffer快呢,就要涉及到线程安全性的问题了);

2,从线程安全性上面来说;
String不必多说。由于是常量,被(final)修饰,一旦创建无法更改,所以搁置一边,自然安全。
Stringbuffer使用了synchronized等关键字,保证了是安全的,但是这种安全是以牺牲一部分性能换取的,所以说解决了上面的问题。
Strinbilder是不安全的,没有保护,只适用于单线程。

3关于适用范围。
String 适用于字符串少更改的情况。
Stringbuffer适用于多线程(因为安全)
Stringblider适用于多更改的单线程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值