Java开发 之 StringBuffer和StringBuilder(1)
来源:互联网 发布:java aspectj 编辑:程序博客网 时间:2024/06/06 03:49
转 : http://www.jcourse.cn/read/234
在我们日常开发中,经常会遇到对文本的操作,并且在一般的MIS系统中,文本操作尤为多,如用户名、文章内容、文章标题、合同内容等。在之前的教程中,我也给大家讲解了Java中最基本的字符串操作的类,String。在之前的教程中我也给大家讲了String是不可变的类,即在构造后其内容不能变化,因此对于内容频繁变动(如我们对文章进行编辑)来说String是不合适的。那么遇到这样的情况时,我们该如何处理呢?Java为我们提供了StringBuilder和StringBuffer。
首先讲讲它们的共同点吧!基本上我们在字符串经常发生改变的时候使用它们,然后使用它们来操作会比使用String类要快些。这两个类的区别是StringBuffer是线程安全的而StringBuilder是非线程安全的。
在大致讲解后,我们看看如何由已有的字符串对象来创建StringBuffer和将StringBuffer转换为String对象。
先给出StringBuffer类的构造方法的API,让我们看看有多少种方式来构造它。
构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence相同的字符。
构造一个不带字符,但具有指定初始容量的字符串缓冲区。
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
可以看出,我们可以直接new一个,也可以在new的时候给出参数。这里的参数可以是一个字符串,可以是一个容量值,也可以是一个CharSequence。我们首先看看用已有的字符串来构造StringBuffer。下面是一个例子:
- public class MainClass {
- public static void main(String[] arg) {
- StringBuffer aString = new StringBuffer("ABCDE");
- String phrase = "abced";
- StringBuffer buffer = new StringBuffer(phrase);
- System.out.println(aString);
- System.out.println(buffer);
- }
- }
上面的代码中,我们用已有的字符串对象new了两个StringBuffer对象然后我们直接将他们作为参数传递给println方法。这里我们可以看出,它们实际上输出的是StringBuffer代表的字符串。其实我们在用StringBuffer构造字符串的时候,到最后还是会调用toString方法来获取输出,从而获得我们实际要用的字符串。
好了,既然讲到了,顺便给大家一个将StringBuffer转换为字符串的例子,很简单:
- public class MainClass {
- public static void main(String[] arg) {
- StringBuffer palindrome = new StringBuffer("so many dynamos");
- String aString = palindrome.toString();
- System.out.println(aString);
- }
- }
看到了吧,其实我们在日常的开发中,尤其是使用StringBuffer来拼SQL的时候,经常用的就是toString方法了。
从上面的构造方法中,我们可以看到,在构造一个StringBuffer对象的时候还可以指定StringBuffer的容量,它是用int来指定的,上面的API中也可以看出,如果不指定则默认为16个字符。好了给出一个例子:
- public class MainClass {
- public static void main(String[] arg) {
- StringBuffer newString = new StringBuffer(50);
- System.out.println(newString.capacity());
- }
- }
上面的例子中,我们构造了一个StringBuffer对象,并给它的容量赋值为50,这样如果我们后面添加的字符少于50,那么就不会出现新扩容量的情况。上面的例子还可以看出,我们可以调用capacity来获取当前的StringBuffer对象的容量信息。下面做个例子来看看StringBuffer容量的变化情况:
- /**
- * User: zhangtao
- * Date: 2009-3-2
- * Time: 16:24:36
- */
- public class StringBufferDemo {
- public static void main(String[] args){
- StringBuffer sb = new StringBuffer();//默认容量为16
- System.out.println(sb.capacity());//输出16
- sb.append("123456789012345");
- System.out.println(sb.capacity());//输出16
- sb.append("6");
- System.out.println(sb.capacity());//输出16
- sb.append("789111");
- System.out.println(sb.capacity());//输出34
- }
- }
最后一个输出的依据是这样的:int newCapacity = (value.length + 1) * 2;这个是内部计算的依据,也就是在超出后,会先计算本身的容量,然后加1,再乘2,所以输出的是17*2 = 34了。有了这个公式,相信大家会知道下一个容量是多少了,没错,是70.
好了,这一讲给大家讲的有点多,先到这里,下面会详细的讲解其他方法给大家。
- Java开发 之 StringBuffer和StringBuilder(1)
- java之StringBuffer和StringBuilder
- JAVA基础笔记之StringBuilder和StringBuffer
- Java学习之StringBuffer和StringBuilder
- Java学习之StringBuffer 和 StringBuilder 类
- Java基础之--StringBuffer和StringBuilder
- Java StringBuffer和StringBuilder
- java Stringbuilder和Stringbuffer
- java之String、StringBuffer、StringBuilder
- JAVA之StringBuffer与StringBuilder
- java之String,StringBuffer,StringBuilder,
- Java之String、StringBuffer、StringBuilder
- Java之String、StringBuffer、StringBuilder
- java String,StringBuffer和StringBuilder
- java-StringBuffer和StringBuilder…
- java基础---StringBuilder 和 StringBuffer
- Java StringBuffer和StringBuilder类
- java String,StringBuffer和StringBuilder
- java实现的FTP上传下载客户端
- java日期时间使用
- js滑动图片菜单
- 心总结
- 5230XM
- Java开发 之 StringBuffer和StringBuilder(1)
- MySQL数据库引擎
- EL表达式
- 客户端测试
- UCHOME的AJAX分享
- 2d
- The Blind Side
- String,StringBuffer与StringBuilder的区别
- NTP