首页 > 其他分享 >String 和 StringBuffer 的区别(及StringBuffer的常用方法)

String 和 StringBuffer 的区别(及StringBuffer的常用方法)

时间:2022-09-22 17:11:52浏览次数:46  
标签:insert 常用 String int StringBuffer str append

String 和 StringBuffer 的区别(及StringBuffer的常用方法)

对比

String StringBuffer
对象是否可变 String创建的对象是不可变的,一旦创建不可改变 StringBuffer创建的对象是可变的
值改变存储过程 对象值的改变是创建了一个新的对象,然后把新的值保存进去 值不是重新创建对象,而是通过构造方法
对象存储位置 String创建的对象存储在常量池,不用的时候不会被销毁 StringBuffer创建的对象的值存在于栈区,不用的时候会被销毁
运行效率 运行时间较长 运行时间较短
适用范围 比较短而小的字符串 比较长的字符串,比较多的字符串
其他 被final修饰,不可以被继承

image

二者速度对比

public class test2 {
    public static void main(String[] args) {
        //1. String值改变测试
        String str = "";
        long stringFirst = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            str = str + i;
        }
        long stringEnd = System.currentTimeMillis();
        System.out.println("String值改变测试 , 时间:" + (stringEnd - stringFirst) + "ms");

        //2. StringBuffer值改变测试
        StringBuffer str2 = new StringBuffer();
        long stringBufferFirst = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            str2.append(i);
        }
        long stringBufferEnd = System.currentTimeMillis();
        System.out.println("StringBuffer值改变测试 , 时间:" + (stringBufferEnd - stringBufferFirst) + "ms");

    }
}

image

结果显而易见,StringBuffer比String性能强太多了

StringBuffer的常用方法

构造函数

StringBuffer() value内容为空,并设置容量为16个字节;
StringBuffer(CharSequece seq)  使用seq初始化,容量在此基础上加16;
StringBuffer(int capacity) 设置特定容量;
StringBuffer(String str)  使用str初始化,容量str大小的基础上加16;

append方法

由于继承了Appendable接口,所以要实现append方法,StringBuffer类对几乎所有的基本类型都重载了append方法:

append(boolean b)
append(char c)
append(char[] str)
append(char[] str,int offset,int len)
append(CharSequence s)
append(CharSequence s,int start,int end)
append(double d)
append(float f)
append(int i)
append(long lng)
append(Object obj)
append(String str)
append(StringBuffer sb)

insert方法

insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:

insert(int offser,boolean b)
insert(int offset,char c)
insert(int offset,char[] str)
insert(int index,char[] str,int offset,int len)
insert(int dsfOffset,CharSequence s)
insert(int dsfOffset,CharSequence s,int start,int end)
insert(int offset,double d)
insert(int offset,float f)
insert(int offset,int i)
insert(int offset,long l)
insert(int offset,Object obj)
insert(int offset,String str)

其它会改变内容的方法

上面的那些方法会增加StringBuffer的内容,还有一些方法可以改变StringBuffer的内容:

StringBuffer delete(int start,int end) 删除从start到end(不包含)之间的内容;
StringBuffer deleteCharAt(int index) 删除index位置的字符;
StringBuffer replace(int start,int end,String str) 用str中的字符替换value中从start到end位置的子序列;
StringBuffer reverse() 反转;
void setCharAt(int index,char ch) 使用ch替换位置index处的字符;
void setLength(int newLength) 可能会改变内容(添加'\0');

其它常用方法

下面这些方法不会改变内容:

int capacity() 返回value的大小即容量;
int length() 返回内容的大小,即count;
char charAt(int index) 返回位置index处的字符;
void ensureCapacity(int minimumCapacity) 确保容量至少是minimumCapacity;
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字符到dst;
int indexOf(String str) 返回str第一次出现的位置;
int indexOf(String str,int fromIndex) 返回从fromIndex开始str第一次出现的位置;
int lastIndexOf(String str) 返回str最后出现的位置;
int lastIndexOf(String str,int fromIndex) 返回从fromIndex开始最后一次出现str的位置;
CharSequence subSequence(int start,int end) 返回字符子序列;
String substring(int start) 返回子串;
String substring(int start,int end) 返回子串;
String toString() 返回value形成的字符串;
void trimToSize() 缩小value的容量到真实内容大小;

标签:insert,常用,String,int,StringBuffer,str,append
From: https://www.cnblogs.com/devour-zuan-blog/p/16720014.html

相关文章

  • Linux常用指令
    1.简单系统命令#查看ip地址ipaipaddr#查看系统时间date#注销logout#关机shutdownnow#重启reboot#清屏clear2.文......
  • 算法题中常用的C++函数
    一、向vector容器中增添元素1、在末尾增添一个元素push_back()2、在任意地方插入一个或多个元素insert()#include<iostream>#include<vector>//注意这......
  • 常用正则表达式大全
    一、校验数字的表达式 1.数字:^[0-9]*$2.n位的数字:^\d{n}$3.至少n位的数字:^\d{n,}$4.m-n位的数字:^\d{m,n}$5.零和非零开头的数字:^(0|[1-9][0-9]*)$6.非零开头......
  • 常用类
    内部类在一个类的内部再定义一个类publicclassBody{//也会生成一个独立的字节码编译class文件:Body$Head.classpublicclassHead{publicvoidsh......
  • python系列——常用系统模块
    常用系统模块os:与操作系统交互os.name/os.sep/os.linesep.:系统名称/系统路径分隔符/系统换行符os.mkdir()/os.makedirs():建立目录/建立多级目录os.getenv("PAT......
  • Error: Debug Failure. False expression: Non-string value passed to `ts.resolveTy
    错误信息:/usr/src/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:43192ts.Debug.assert(typeoftypeReferenceDirectiveNam......
  • Polycarp Writes a String from Memory CodeForces - 1702B
    PolycarpWritesaStringfromMemoryCodeForces-1702B给定大小为n的字符串,至多每3种不同的字母分为一组,最少将字符串分为多少组?Input第一行输入数据包含一个整......
  • JAVA常用工具类
    java开发常用工具类java正则表达式的匹配包括:邮箱,手机,姓名,昵称,身份证号,银行卡号等;生成6位随机数;对url中字符串进行编码和解码;获取客户端ip地址;获取系统当前时间;生......
  • java中String的常用方法
    1、length()字符串的长度例:charchars[]={'a','b'.'c'};Strings=newString(chars);intlen=s.length();2、charAt()截取一个字符例:charch......
  • Uncaught DONException: Failed to execute ‘atob‘ on “window ‘: The string to
    data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABGU....报错是因为没有去除 data:image/png;base64,应只要后面的文件流1.base64:可以直接当作链接地址使用1......