一、String类
Java中的字符串属于对象,Java提供了String类来创建和操作字符串。
String的值是不可变的,每次操作String都会导致创建新的String对象,效率低下,而且浪费有限的
内存空间;
示例:
String a="a";
a=a+"s";
第一次创建a类型字符串的時候,会在堆内存中开辟一个内存空间。
第二次在a类型字符串的基础上追加一个新的字符串"s",这个过程是需要重新在栈堆内存中开辟内存空间的;
最后的得到的"as"字符串也是需要相应的开辟一个新的空间。
对内存空间造成了极大的浪费;
二、StringBuffer类和StringBuilder类
和String类不同的是,StringBuffer类和StringBuilder类的对象能够被多次修改,并且不产生新的对象。
StringBuffer类和StringBuilder类的不同
StringBuffer类和StringBuilder类最大的不同是StringBuilder类不是线程安全的,不能同步访问。
StringBuilder类相比较于StringBuffer类有速度优势,执行速度快,如果没有线程安全的要求情况下,建议使用
StringBuilder类,然而如果在应用程序要求线程安全的情况下必须使用StringBuffer类。
三者的区别
- StringBuffer类和StringBuilder类非常相似,均可代表可变的字符序列,而且方法也一样。
- String:不可变字符序列。
- StringBuilder:可变字符序列、线程不安全、执行速度快。
- StringBuffer:可变字符序列、线程安全、执行速度慢。
初始化上的区别
Stirng可以空赋值,后者StringBuffer类和StringBuilder类不可以。
会报错:结果警告:Null pointer access: The variable result can only be null at this location