String:是不可变类,即String被创建之后,它的值是不变的。当被实例化时,可以利用构造函数,如String s=new String("str");来初始化,也可以直接赋值String s="hello";
StringBuffer:是可变类,即当对象创建后,仍然可以对其进行修改。(字符串经常需要修改)当实例化时,必须要用构造函数StringBuffer s=new StringBuffer("str");来初始化。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~我是可爱的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
String字符串修改步骤:
首先创建一个StringBuffer,然后调用append()方法,最后调用toString();把结果返回
1)String s="hello"; s+="baby"; //存在附加操作,产生了一些临时的对象
2)StringBuffer sb=new StringBuffer(s); sb.append("baby"); s=sb.toString();
来验证一下
package com.study;
public class Test {
public static void testString(){
String s1="Hi";
String s2="baby";
long begin =System.currentTimeMillis();
for(int i=0;i<1000;i++){
s1+=s2;
}
long end=System.currentTimeMillis();
long runtime=end-begin;
System.out.println("String修改时间"+runtime);
}
public static void testStringBuffer(){
StringBuffer s=new StringBuffer("Hi");
String s2="baby";
long begin =System.currentTimeMillis();
for(int i=0;i<1000;i++){
s.append(s2);
}
long end=System.currentTimeMillis();
long runtime=end-begin;
System.out.println("StringBuffer修改时间"+runtime);
}
public static void main(String[] args) {
Test.testString();
Test.testStringBuffer();
}
}
运行的结果:
String修改时间28
StringBuffer修改时间0
另附StringBuilder和StringTokenizer:
StringBuilder:与StringBuffer相似,但是适合于单线程的情况下,效率最高,但是不是线程安全的。(多线程用StringBuffer)
StringTokenier:用于分割字符串的工具类。
如StringTokenizer s=new StringTokenizer("we are unique");
while(s.hasMoreTokens()){
System.out.println(s.nextToken);
}
输出的结果将会是:
We
are
unique