今天依舊記錄一下今天的學習的知識。安全
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 }