查缺补漏——String,StringBuffer,StringBuilder区别及用法

最近在看并发及虚拟机部分,介绍了String是不可变的对象,顺便复习了与string相关的类。

一 String是不可变对象,它一定是线程安全的,因为当我们调用substring(),replace(),concat()这些方法时,都不会影响它原来的值,只会返回一个新构造的字符串对象,因此当要经常改变字符串内容时尽量不要用String对象,因为每次生成对象都会对系统性能产生影响,特别是当内存中无引用对象多了以后,JVM的GC就开始工作,性能就会降低。

二 StringBuffer(JDK1.0)是线程安全的,因为类中的方法(源码)是用synchronized声明的,如图:

因此该类可以运行在多线程环境中,在频繁地进行字符串运算时可以使用。

三 而对于StringBulider类(JDK1.5)来说就是非线程安全的,因为他的底层源码没有synchronized声明,可以在单线程环境下使用。

猜你喜欢

转载自blog.csdn.net/wo8vqj68/article/details/82930349