JavaString

java字符串

StringBuffer StringBuilder String的区别
  • String是字符串常量
    看下面代码,可能会有以下认为,s中的内容明明变了,为什么会说String变量是不可变的,其实这种变化是由JVM虚拟机来处理的,在JVM中重新创建一个对象,然后把新的值保存进去。如果这样只会JVM会不断创建新的对象,而原来的对象变为垃圾被GC回收,所以执行的效率会较低。
    String s = "Hello";    
    s = s + " World";
  • StringBuffer和StringBuilder是字符串变量,是可以改变的对象,当对字符串进行操作的时候实际上是对一个对象进行操作,不用像String一样不断创建新的对象,所以在执行效率上会比较快。
  • 看下面例子
    String s = "I"+" love"+" study";
    StringBuilder sb = new StringBuilder("I").append(" love").append(" study"); 

在这个例子中,String的执行速度会快于StringBuilder,其实这只是JVM给人的一种迷惑。实际上
String s = "I"+" love"+" study";
就是String s = "I love study";
所以不用太多时间,执行速度快于StrignBuilder,但如果字符串来自于另外的String对象,JVM会按照创建新的对象的方式去做。
* 当字符缓冲用于多线程的时候,尽管StringBuilder的速度最快但是JVM不能保证它的操作是安全的,但是StringBuffer是安全的。所以在单线程的时候一般用StringBuilder就是因为他的速度,在多线程用StringBuffer是为了保证操作的安全性。
* 对于三者速度方面的总结
String<StringBuffer<StringBuilder

对于StringBuffer StringBuilder String运用场合的总结
  • 在操作少量的数据的时候用 String
  • 操作大量的数据,单线程的情况下为了保证速度用 StringBuilder
  • 操作大量的数据,多线程的情况下为了保证操作的安全用 StringBuffer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值