目录
一:字符串相关类
String类是不可变字符序列,每次赋值的时候都要重新创建对象
StringBuilder是可变字符序列,每次赋值返回的都是当前对象,它是最常用的,它的效率高,但是线程不安全
StringBuffer也是可变字符序列 ,它不太常用,它线程安全,但是效率低
看下面代码
package com.changYongLei;
public class TestString {
public static void main(String[] args) {
String str="aaaa";
StringBuffer s2=new StringBuffer("aaa");//可变字符序列,效率低,线程安全
StringBuilder s1=new StringBuilder("abcdef");//可变字符序列,效率高,线程不安全
s1.append(123);//仍返回自身对象,不像String那样返回一个新的对象
s1.append(456);
System.out.println(s1);
}
}
二:常用的方法列表
大部分都在用append()这个方法,执行完这个方法后,仍返回自身对象,return this
三:不可变序列和可变序列使用陷阱——大量修改时的效率测试
这里充分体现了StringBuilder效率高的特点和可变字符序列的优点
package com.changYongLei;
public class TestTest {
public static void main(String[] args) {
/*使用String进行字符串拼接*/
String str="";
long num1=Runtime.getRuntime().freeMemory();//获取系统剩余内存空间
long time1=System.currentTimeMillis();//获取系统当前时间
for(int i=0;i<5000;i++){
str=str+i;
}
long num2=Runtime.getRuntime().freeMemory();
long time2=System.currentTimeMillis();
System.out.println("String占用的内存空间:"+(num1-num2));
System.out.println("String运行占用的时间:"+(time2-time1));
/*使用StringBulider进行字符串拼接*/
StringBuilder str2=new StringBuilder("");
long num3=Runtime.getRuntime().freeMemory();
long time3=System.currentTimeMillis();
for(int i=0;i<5000;i++){
str2.append(i);
}
long num4=Runtime.getRuntime().freeMemory();
long time4=System.currentTimeMillis();
System.out.println("StringBulider占用的内存空间:"+(num3-num4));
System.out.println("StringBulider运行占用的时间:"+(time4-time3));
}
}