欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Java学习笔记】StringBuffer可变字符串的使用

程序员文章站 2024-03-22 09:45:34
...

该文章是观看https://www.bilibili.com/video/BV1ct411n7oG?p=117后的学习笔记。

下面先来看实例代码,再对立面用到的函数进行说明:

public class TestStringBuffer {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        for(int i=0;i<26;i++){
            stringBuffer.append((char)('a'+i));
        }
        System.out.println(stringBuffer);
        stringBuffer.reverse();
        //设置下标为2的位置的值为X
        stringBuffer.setCharAt(2,'X');
        System.out.println("设置下标2为X:"+stringBuffer);
        //在下标为3、4的位置的稠入值4、5;链式调用方法
        stringBuffer.insert(3,'4').insert(4,'5');
        System.out.println("在下标3插入4:"+stringBuffer);
        //删除下标位置为1到26的数据
        stringBuffer.delete(1,26);
        System.out.println("删除下标1到26的数据:"+stringBuffer);
        String s="";
        double st,et,mst,met;
        mst=Runtime.getRuntime().freeMemory();
        st = System.currentTimeMillis();
        for(int i=0;i<20000;i++){
            s+=i;
        }
        et = System.currentTimeMillis();
        met=Runtime.getRuntime().freeMemory();
        System.out.println("20000次操作String耗时:"+(et-st)+"毫秒");
        System.out.println("20000次操作String占用内存:"+(met-mst));
        StringBuffer s2=new StringBuffer("");
        mst=Runtime.getRuntime().freeMemory();
        st = System.currentTimeMillis();
        for(int i=0;i<20000;i++){
            s2.append(i);
        }
        et = System.currentTimeMillis();
        met=Runtime.getRuntime().freeMemory();
        System.out.println("20000次操作StringBuffer耗时:"+(et-st)+"毫秒");
        System.out.println("20000次操作String占用内存:"+(met-mst));
    }
}

程序运行结果: 

【Java学习笔记】StringBuffer可变字符串的使用 

1.比较StringBuffer与String大量拼接字符串所消耗的时间与空间:

  String s="";
        double st,et,mst,met;
        mst=Runtime.getRuntime().freeMemory();
        st = System.currentTimeMillis();
        for(int i=0;i<20000;i++){
            s+=i;
        }
        et = System.currentTimeMillis();
        met=Runtime.getRuntime().freeMemory();
        System.out.println("20000次操作String耗时:"+(et-st)+"毫秒");
        System.out.println("20000次操作String占用内存:"+(met-mst));
        StringBuffer s2=new StringBuffer("");
        mst=Runtime.getRuntime().freeMemory();
        st = System.currentTimeMillis();
        for(int i=0;i<20000;i++){
            s2.append(i);
        }
        et = System.currentTimeMillis();
        met=Runtime.getRuntime().freeMemory();
        System.out.println("20000次操作StringBuffer耗时:"+(et-st)+"毫秒");
        System.out.println("20000次操作String占用内存:"+(met-mst));
    }

程序运行的结果: 

【Java学习笔记】StringBuffer可变字符串的使用 

从程序运行的结果中可以看出,使用StringBuffer对字符串进行拼接操作比String节省了大量的时间与空间。因为,String的每次操作都会新建一个新对象,从而导致在操作完成后会多出很多无用的对象,导致内存泄漏。因此,在编写服务器程序时,如果需要进行大量的字符串拼接操作,一定要使用StringBuffer,避免内存泄漏导致程序崩溃。

2.append进行字符串拼接:

StringBuffer stringBuffer = new StringBuffer();
for(int i=0;i<26;i++){
    stringBuffer.append((char)('a'+i));
}

3.setChat设置指定位置字符的值:

//设置下标为2的位置的值为X
stringBuffer.setCharAt(2,'X');

4.insert在指定下标位置插入字符:

//在下标为3、4的位置的稠入值4、5;链式调用方法
stringBuffer.insert(3,'4').insert(4,'5');

5.delete删除指定下标之间的数据:

//删除下标位置为1到26的数据
stringBuffer.delete(1,26);

注:上面的函数方法都可以链式调用。