一、Java String 类——String字符串常量
需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成**新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看对String操作时内存变化:
我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费。为了应对经常性的字符串相关的操作,谷歌引入了两个新的类——StringBuffer类和StringBuild类来对此种变化字符串进行处理。
总结:
1 String 是不可变的,StringBuffer、StringBuilder是可变的
2 String 、StringBuffer是线程安全的,StringBuilder是线程不安全的 (StringBuffer的append操作用了synchronized)
3 String对象串联的效率最慢,单线程下字符串的串联用StringBuilder,多线程下字符串的串联用StringBuffer
4 在编译阶段就能够确定的字符串常量,完全没有必要创建String或StringBuffer对象。直接使用字符串常量的"+"连接操作效率最高
5 一般来说 执行时间上从快到慢: StringBuilder、StringBuffer、String
网友评论