JAVA-初步认识-常用对象API(StringBuilder类)
一.
兼容是什么意思?就是说两者是一回事,也就是说,用StringBuffer行,用StringBuilder也行,功能一模一样,用法一模一样。
区别在于StringBuilder是1.5版本才在,而StringBuffer是1.0版本就存在了。
为什么1.5版本推出一个和1.0版本中StringBuffer类似的方法呢?因为StringBuilder不保证同步,而StringBuffer保证安全。
StringBuffer怎么保证安全的?这点很重要,和日后要学习的容器相关。
为什么速度会快?不需要判断锁,锁在哪儿?
StringBuffer来的时候,作为一个容器,它需要考虑,万一被多线程所操作的时候,不安全怎么办呢?它就做了一个同步的动作。
它是怎么实现同步的呢?思考,到底同步什么最重要?
我创造一个StringBuffer对象,一个线程在往里面添加,一个线程在删除,这个时候就会出现安全隐患。因此,要保证删的时候,不能添;添的时候,不能删。这锁怎么加?这就意味着,添和删要进行同步,
这样一来,就同步了,只要是用的同一个锁就可以了。
一般它们不这么操作,而是在内部用同步代码块解决。
StringBuffer在1.0的时候,确实完成同步了,安全了。也是容器,速度也慢。调用一次添加方法,要进行判断;调用一次删除方法,也要进行判断,如果是单线程的话,就废了,调用一次,判断一次;调用一次,判断一次;这就很慢了。但是那个时候,我们更多的是考虑的安全,后期出现StringBuilder就是为了解决单线程效率低的问题。
单线程使用builder,多线程使用buffer。builder的出现就是为了提高缓冲区的效率。
简化书写通常会有局限性,效率也是,而安全性提高带来都是书写的麻烦。