最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
上一篇介绍的是String类,大家可以发现String类虽然很基础很重要但是由于其不可变字符序列的本质,灵活度却很低,本篇来介绍一个非常实用的类——StringBuilder类,来大幅度提高对String操作的效率。
StringBuilder是一种操作可变字符序列的类,其append等多个方法都能是在实际编程中非常常用的方法,和上篇介绍的方式一样,关于方法注意事项或者细节方面的知识直接在代码中体现。
同时想说的是现在看教学视频老师都是大量地引导学生通过Eclipse看JDK源码,尤其是array类还有String、StringBuilder类这些很基础重要或者实用的类,要多多看源码。关于如何在Eclipse下设置并查看JDK源码(JDK版本要新,最低6.0的),请参考如下网址:请点击此处进入:http://blog.csdn.net/bruce128/article/details/6887732。
接下里,就是喜闻乐见的上代码环节:
/**
* 测试可变字符序列。StringBuilder(线程不安全,效率高),StringBuffer(线程安全,效率低)
* String:不可变字符序列
*/
public class Test01 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); //字符数组长度初始为16
StringBuilder sb1 = new StringBuilder(32); //字符数组长度初始为32
StringBuilder sb2 = new StringBuilder("abcd"); //字符数组长度初始为32, value[]={'a','b','c','d',\u0000,\u0000...}
sb2.append("efg"); //append:累加,把要拼接的全都转为字符串型接到后面;把efg加到abcd后边,没有new新的字符串的过程,所以StringBuilder是可变字符序列。
sb2.append(true).append(321).append("随便"); //每次通过return this返回更改后的sb2,然后再调用append方法···以此实现方法链,一次性连接多个,非常实用!
System.out.println(sb2);
//上篇笔记里面的那个例子
StringBuilder gh = new StringBuilder("a"); //此时数组(char[] value,具体见源码)长度为16+1=17,数组一旦建立就不能变了,那么后面的1000能装下吗?
for (int i = 0; i < 1000; i++) {
gh.append(i); //append方法里面有一个ensurecapacity方法,这个方法里面调用了expendcapacity方法,里面会建立一个新数组,长度=原数组*2+2(JDK规定),然后把老数组的内容全部复制进去,然后再添加新的数组成员,最后把老数组回收掉,其实不是真正的扩容,这是JAVA容器的一种性质,要理解!
}
System.out.println(gh);
}
}
public class Test02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("abcdefghijklmnopqrstuvwxyz");
sb.delete(3, 5).delete(3, 5); //delete方法:也可以通过return this实现方发链,删除数组里面索引号为 形参1 到形参2 之间的所有数组成员,包含形参1,不包含形参2。结果:abchijklmnopqrstuvwxyz
System.out.println(sb);
sb.reverse(); //反转,倒序输出。
System.out.println(sb);
StringBuffer sb2 = new StringBuffer(); //StringBuffer的用法几乎和StringBuffer一样,涉及到多线程问题。后续再说。
}
}
这两篇笔记内容较少主要是因为有大量看JDK源码的过程,无法用文字来表述,我们大家以后想学好JAVA就都要勤看JDK源码,Eclipse下的JDK源码查看是只读的,无法修改,打开源码的class文件之后按F4可以将方法列表显示在界面的左下角,通过相关选项可以查看继承等信息。