String StringBuffer StringBuilder区别:
String被final定义 , 他的值是不可变的,我们对String的操作,每次都会产生一个新的String对象,这样做效率低下,浪费空间
StringBuilder : 线程不安全,只能单线程操作
本身是一个可变的类,不会产生新的对象,StringBuilder对象创建的时候会有一定的缓冲容量,当字符串的大小没有超过容量时,不会分配新的容量,一旦超过,那就回自动增加容量
StringBuffer 线程安全.可变类 , 不会产生新的对象,StringBuffer对象创建的时候会有一定的缓冲容量,当字符串的大小没有超过字符串的容量时,不会分配新的容量,一旦超过,那就回自动增加容量
StringBuffer在多线程下是安全的,StringBuffer内部加了锁,所以线程是安全的 (一个作为全局变量的StringBuffer 对象先对200个字符串进行拼接,在对200个字符串进行拼接,在多线程对这个对象进行多次字符串拼接操作,不会造成字符串的丢失)
所有类名包含Buffer的类的内部实现原理是什么?
原理:Buffer即缓冲区,是包含有一定量数据的容器,缓冲区我们可以理解为一个水管,满足FIFO,如果我们不设置缓冲区,那么就会增加系统的不稳定性和安全性。比如系统对接过程中,不设置缓冲区,对于其它系统作出的请求都得立即响应,疲于奔命直至系统崩溃。而增加缓冲区成本低,可以批量处理,效率更高。
优势是什么?
优势:buffer是用来临时存储一些二进制数据的,当我们要把一大块数据从一个地方传输到另一个地方时,我们可以使用buffer对象进行传输 ; 通过buffer每次可以传输一小部分的数据,直到所有的数据都被传输完毕
不用每次都要开辟新的内存空间,只有需要的足够大时才需要