Java|java StringBuilder和StringBuffer类的使用

Java|java StringBuilder和StringBuffer类的使用

/**
* StringBuilder和StringBuffer
* StringBuilder可变字符序列 不做线程同步检查 效率高 常用
* StringBuffer可变字符序列 做线程同步检查 效率低
【Java|java StringBuilder和StringBuffer类的使用】* StringBuilder和StringBuffer的方法用法相同
*/
public class TestString2 {
public static void main(String[
args) {
StringBuilder s1 = new StringBuilder(\"asd\");
//写成StringBuilder s1 = \"asd\"会报错 \"asd\"是String类 StringBuilder和StringBuffer都不可以用\"\"字符串直接赋值
//new StringBuilder(String str) 输入的asd是String类
StringBuffer s2 = new StringBuffer();
//无参 返回空字符串\"\" new对象的value为长度16的char[
数组
s2.append(s1);
System.out.println(s2+\"的结果为asd\");
//在原始字符串的结尾append附加实参字符串 返回this本身 不会额外new新的字符串返回
s2.append(s1).append(\"a\").append(s1);
System.out.println(s2+\"的结果为asdasdaasd\");
//因为.append()会返回this 所以 s2.append(s1)返回变长的s2后面再接.append(\"a\")返回变长的s2再接.append(s1)依然返回this对象本身
// 后面还可以.方法名()调用StringBuffer的所有方法
s2.delete(13).delete(01);
System.out.println(s2+\"的结果为asdaasd\");
//.delete(startend)删除index从start至end-1位置的字符 同样返回this后面可以继续.方法名()
s2.deleteCharAt(1).deleteCharAt(0);
System.out.println(s2+\"的结果为daasd\");
//.deleteCharAt(index)删除索引位的字符 返回this
s2.insert(0s1).insert(11);
System.out.println(s2+\"的结果为a1sddaasd\");
//.insert()在index位插入字符 index位原来的字符及后面的字符往后移位 返回this
System.out.println(s2.reverse()+\"的结果为dsaadds1a\");
//.reverse()将字符串反转 返回this
String str1 = \"\";
long memory1Start = Runtime.getRuntime().freeMemory();
//获得JVM虚拟机可用的系统剩余内存空间 Runtime.getRuntime()返回new Runtime对象 .freeMemory()可用内存 返回值类型为long
long time1Start = System.currentTimeMillis();
//current当前的 millisecond毫秒 获得当前时间 单位毫秒 值为当前时间减去1970-01-01 0:00 返回值类型为long
for (int i =0;i<5000;i++){
str1 = str1+i;
//拼接i new一个新的字符串赋值给str1 循环5000次即new5000个字符串对象

long memory1End = Runtime.getRuntime().freeMemory();
long time1End = System.currentTimeMillis();
System.out.println(memory1Start-memory1End+\"占用内存38606648\");
System.out.println(time1End-time1Start+\"用时79\");
StringBuilder str2 = new StringBuilder();
//使用StringBuilder拼接字符串
long memory2Start = Runtime.getRuntime().freeMemory();
long time2Start = System.currentTimeMillis();
for (int i = 0; i<5000;i++){
str2.append(i);
//将int加入字符串末尾 返回this 不产生新的字符串对象

long memory2End = Runtime.getRuntime().freeMemory();
long time2End = System.currentTimeMillis();
System.out.println(memory2Start - memory2End+\"占用内存0\");
System.out.println(time2End-time2Start+\"用时0\");
//大量拼接字符串操作使用StringBuilder