今天依旧记录一下今天的学习的知识。

 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 }