String:是一个最终类(final)不能被继承,当使用时,创建一个String对象
会分配一个,会给对象分配一块空间,当进行字符串的改变时,那么原字符串的
内存内容不会改变,会给改变后的字符串重新分配内存。
举例:String a = new String("123");
a = a+"456";
这时原对象的内存内容没有改变还是“123”
只是字符串改变后为“123456” 重新分配 了一块空间
这是对象引用变量a从指向原“123”变为指向现在新的内容“123456”
所以使用String操作字符串时,会造成很大的内存开销
应用场景:操作少量 数据
StringBuffer: 而 StringBuffer就会解决String的问题,他内存是动态可扩展的
进行字符串的改变时内存地址不会改变,空间大小会改变,并且效率 比较高
应用场景:操作大量数据,多线程
用于单例线程,不会出现线程安全问题。
StringBuilder: 这个跟 StringBuffer 类似,效率高,内存可扩展性,他比StringBuffer速度更快,
因为使用了多线程,但是会有线程安全问题。
应用场景:操作大量数据,单线程