String,StringBuffer,StringBuilder有什么区别?
- String是不可变类,String对象一旦被创建,值不会被改变;StringBuffer是可变类,被创建后仍可以对值修改
- String实例化时,可以利用构造函数
String s1 = new String("world")
的方式,也可以用赋值String s = "Hello"
的方式;而StringBuffer只能使用构造函数StringBuffer s = new StringBuffer("Hello")
的方式初始化 - StringBuilder也是可以被修改的字符串,与StringBuffer类似,都是字符串缓冲区
- StringBuilder不是线程安全的,如果只是在单线程使用字符串缓冲区,StringBuilder效率会更高;当有多个线程访问时,使用线程安全的StringBuffer,它会对方法进行同步。
- 按照执行效率来排序,StringBuilder最高,StringBuffer次之,String最低。所有如果要操作的数据量比较小,应该优先使用String类;如果在单线程操作大量数据,优先使用StringBuilder;如果在多线程操作大量数据,优先使用StringBuffer。
String字符串修改实现的原理
当用String类型来对字符串进行修改时,实现方法是首先创建一个StringBuffer,其次调用StringBuffer的append方法,最后调用toString方法返回结果
String s = "Hello";
s += "World";
以上代码等价于:
StringBuffer sb = new StringBuffer(s);
s.append("World");
s = sb.toString();
所以可以看出上述过程比StringBuffer多了一些附加的操作,同时生成些临时的对象,导致程序的执行效率降低
StringTokenizer
StringTokenizer是用来分割字符串的工具类
public class Test{
public static void main(String args[]){
StringTokenizer st = new StringTokenizer("Welcome to our country");
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
}
}
运行结果:
Welcome
to
our
country