String、StringBuffer、StringBuilder之间区别
简单类比:
String |
StringBuffer |
StringBuilder |
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 |
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 |
可变类,速度更快 |
不可变 |
可变 |
可变 |
|
线程安全 |
线程不安全 |
|
多线程操作字符串 |
单线程操作字符串 |
- string类介绍
不可变的对象对象解释:string类开辟的自然是对象,但是将对象(字符串连接)赋值时,对象是不会改变的,内存中的对象不变,之所以赋值拼接成功,是因为创建了一个新的对象。只不过对象名字没变而已,其实对象名早就指向了新建的对象了。
例如:
String str = “hello”;
Str=str+”world”;
内存变化:创建了三个对象。开辟了三个空间。
- StringBuffer 和 StringBuilder 类
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