一、Java String类 --String字符串常量
.字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串。
需要注意的说,String值是不可变的,这就会导致String的操作每次都会生成一个新的String对象,这样不仅是效率低下,而且会浪费大量的内存空间。
二、Java StringBuffer和StringBulide类--StringBuffer字符串变量、StringBulider字符串变量
如果当我们对字符串进行修改的时候,我们就会需要到StringBuffer类和StringBuilder类
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次修改的,并且不产生新的未使用对象(间接也就是不耗费更多的内存)。。
StringBuilder类是在Java5中被提出来的,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类,如果程序要求线程安全的情况下,则必须使用StringBufer类
三者的继承结构
三者的区别
StringBuilder和StringBuffer非常相似,均代表可变的字符序列,并且方法也一样。
String:不可变字符序列
StringBuffer:可变字符序列.效率低、线程安全高
StringBuilder(jdk1.5)可变字符序列,效率高,线程不安全
String s="a"//创建了一个字符串
s=s+"b";//实际上原来的“a”字符串已经丢弃了,现在又产生了一个字符串s+"b”,也就是ab,如果多次执行这些改变串的内容会导致大量副本字符串对象留存在内存中,降低效率,这样循环操作会极大的影响程序的性能
1)字符修改上的区别(主要,见上面分析)
(2)初始化上的区别,String可以空赋值,后者不行,报错
①String
String s = null;
String s = “abc”;
②StringBuffer
StringBuffer s = null; //结果警告:Null pointer access: The variable result can only be null at this location
StringBuffers s = new StringBuffers();//StringBuffer是一个空的对象
StringBuffers s = new StringBuffers();//创建有内容的StringBuffer对象,对象的内容就是字符串。
小结:
1.如果要操作少量数据用String;
2.多线程操作字符串缓冲区下操作大量数据StringBuffer;
3.单线程操作字符串缓冲区下大量数据StringBuilder;