java培训技术之可变字符序列:字符串缓冲区

1 StringBuffer、StringBuilder、String的区别

Java培训

1.1、一个类似于 String 的字符串缓冲区,但能被修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容,所有对StringBuffer或StringBuilder对象的字符序列的修改不会产生新的StringBuffer或StringBuilder对象,这点和String很大的不同。

Java培训课程

value没有final声明,value可以不断扩容,count记录有效字符的个数。

1.2、StringBuilder:线程安全,效率低;StringBuffer:线程不安全,效率高

2 StringBuffer和StringBuilder不同的API

2.1、构造器

StringBuffer或StringBuilder对象的创建必须用new+构造器。

StringBuffer()   初始容量为16的字符串缓冲区

StringBuffer(int size)   构造指定容量的字符串缓冲区

StringBuffer(String str)  将内容初始化为指定字符串内容

2.2、和字符序列改变有关的方法

而且所有这些方法支持方法链

StringBuffer append(xx):提供了很多的append()方法,用于进行字符串拼接

StringBuffer delete(int start,int end):删除指定位置的内容

StringBuffer insert(int offset, xx):在指定位置插入xx

StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str

StringBuffer reverse() :把当前字符序列逆转

    public static void main(String[] args) {

         StringBuffer sf = new StringBuffer();

         sf.append(“hello”).append(“world”).append(“java”);

         System.out.println(sf);

    }

方法链的原理

java培训课程

当append和insert时,如果原来value数组长度不够,可扩容

java培训技术

java培训课程

java培训技术

3 效率测试

package com.api.string;

 

public class TestStringBuilder {

 

    public static void main(String[] args) {

         testStringBuilder();

         testStringBuffer();

         testString();

    }

    public static void testString(){

         long start = System.currentTimeMillis();

         String s = new String(“0”);

         for(int i=1;i<=10000;i++){

             s += i;

         }

         System.out.println(s);

         long end = System.currentTimeMillis();

         System.out.println(“String拼接+用时:”+(end-start));

         long memory = Runtime.getRuntime().totalMemory() – Runtime.getRuntime().freeMemory();

        System.out.println(“String拼接+memory: ” + memory);

    }

    public static void testStringBuilder(){

         long start = System.currentTimeMillis();

         StringBuilder s = new StringBuilder(“0”);

         for(int i=1;i<=10000;i++){

             s.append(i);

         }

         System.out.println(s);

         long end = System.currentTimeMillis();

         System.out.println(“StringBuilder拼接+用时:”+(end-start));

         long memory = Runtime.getRuntime().totalMemory() – Runtime.getRuntime().freeMemory();

        System.out.println(“StringBuilder拼接+memory: ” + memory);

    }

    public static void testStringBuffer(){

         long start = System.currentTimeMillis();

         StringBuffer s = new StringBuffer(“0”);

         for(int i=1;i<=10000;i++){

             s.append(i);

         }

         System.out.println(s);

         long end = System.currentTimeMillis();

         System.out.println(“StringBuffer拼接+用时:”+(end-start));

         long memory = Runtime.getRuntime().totalMemory() – Runtime.getRuntime().freeMemory();

        System.out.println(“StringBuffer拼接+memory: ” + memory);

    }

}


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)