String、StringBuffer、StringBuilder之间区别

简单类比:

String    

StringBuffer    

StringBuilder

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间

 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 

可变类,速度更快

不可变    

可变  

 可变

 

 线程安全    

线程不安全

 

 多线程操作字符串  

 单线程操作字符串

 

  1. string类介绍

不可变的对象对象解释:string类开辟的自然是对象,但是将对象(字符串连接)赋值时,对象是不会改变的,内存中的对象不变,之所以赋值拼接成功,是因为创建了一个新的对象。只不过对象名字没变而已,其实对象名早就指向了新建的对象了。

例如:

String  str = “hello”;

Str=str+”world”;

内存变化:创建了三个对象。开辟了三个空间。

String、StringBuffer、StringBuilder之间区别

 

  1. StringBuffer 和 StringBuilder 类

StringBuffer字符串变量线程安全    同步访问

StringBuilder字符变量非线性安全   不能通部访问

两者的对象都能多次修改,只要在一定的容器空间内,就不会创建新的空间==对象

 

  1. 继承关系

String、StringBuffer、StringBuilder之间区别

 

小结:(1)如果要操作少量的数据用 String;

(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;

(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder

 

特殊情况:

String S1 = “This is only a” + “ simple” + “test”;

==

String S1 = “This is only a simple test”; 

 

注意:

String s="Hello world"; 与基本数据类型的赋值操作(int i=1)很像但本质不同

引用:https://blog.****.net/itchuxuezhe_yang/article/details/89966303