今天依旧记录一下今天的学习的知识。
1 /** 2 * 测试StringBuilder StringBuffer,可变字符序列 3 * String对象称为“不可变对象"指的是对象内部成员变量的值无法再改变 4 * @author 小白 5 * 6 */ 7 8 public class TestBuilder { 9 public static void main(String[] args) { 10 11 //StringBuilder线程不安全,效率高(一般使用它);StringBuffer线程安全,效率低 12 StringBuilder sb = new StringBuilder("abcdefg"); 13 14 System.out.println(Integer.toHexString(sb.hashCode())); 15 System.out.println(sb); 16 17 sb.setCharAt(2, 'M'); 18 System.out.println(Integer.toHexString(sb.hashCode())); 19 System.out.println(sb); 20 } 21 }
1 /** 2 * 测试StringBuilder StringBuffer可变字符序列的常用方法 3 * @author 小白 4 * 5 */ 6 public class TestStringBuilder3 { 7 public static void main(String[] args) { 8 StringBuilder sb = new StringBuilder(); 9 10 for(int i=0;i<26;i++){ 11 char temp = (char)('a'+i); 12 sb.append(temp); 13 } 14 15 System.out.println(sb); 16 sb.reverse();//倒序 17 System.out.println(sb); 18 sb.setCharAt(3, '高');//替换字符 19 System.out.println(sb); 20 sb.insert(0, '我').insert(6, '大');//链式调用,核心就是:该方法调用了return this,把自己返回了。 21 System.out.println(sb); 22 sb.delete(10, 20); 23 System.out.println(sb); 24 } 25 }
1 /** 2 * 测试可变字符序列和不可变字符序列使用的陷阱 3 * @author 小白 4 * 5 */ 6 public class TestStringBuilder4 { 7 public static void main(String[] args) { 8 9 /*使用String进行字符串的拼接*/ 10 String str8 = ""; 11 //本质上使用StringBuilder拼接,但是每次循环都会生成一个StringBuilder对象 12 long num1 = Runtime.getRuntime().freeMemory();//获取系统剩余内存空间 13 long time1 = System.currentTimeMillis();//获取系统的当前时间 14 for(int i=0;i<5000;i++){ 15 str8 = str8 + i;//相当于产生了10000个对象 16 } 17 long num3 = Runtime.getRuntime().freeMemory(); 18 long time2 = System.currentTimeMillis(); 19 System.out.println("String占用内存:" + (num1 - num3)); 20 System.out.println("String占用时间:" + (time2 - time1)); 21 22 //以后因该使用StringBuilder的append()的方法进行字符串的拼接,切记切记 23 /*使用StringBuilder进行字符串的拼接*/ 24 StringBuilder sb1 = new StringBuilder(""); 25 long num4 = Runtime.getRuntime().freeMemory(); 26 long time3 = System.currentTimeMillis(); 27 for(int i=0;i<5000;i++){ 28 sb1.append(i); 29 } 30 long num5 = Runtime.getRuntime().freeMemory(); 31 long time4 = System.currentTimeMillis(); 32 System.out.println("StringBuilder占用内存" + (num5 - num4)); 33 System.out.println("StringBuilder占用时间" + (time4 - time3)); 34 35 } 36 37 }