欢迎光临散文网 会员登陆 & 注册

java StringBuilder和StringBuffer类的使用

2022-07-12 18:22 作者:虚云幻仙  | 我要投稿

/**
* StringBuilder和StringBuffer
* 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(1,3).delete(0,1);
       System.out.println(s2+"的结果为asdaasd");
       //.delete(start,end)删除index从start至end-1位置的字符 同样返回this后面可以继续.方法名()
       s2.deleteCharAt(1).deleteCharAt(0);
       System.out.println(s2+"的结果为daasd");
       //.deleteCharAt(index)删除索引位的字符 返回this
       s2.insert(0,s1).insert(1,1);
       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
   }
}

java StringBuilder和StringBuffer类的使用的评论 (共 条)

分享到微博请遵守国家法律