Java中String,StringBuffer,StringBuilder的区别与联系以及使用场景

String、StringBuffer、StringBuilder三者的异同?

String: 不可变的字符序列;底层使用char[]存储(jdk1.8及1.8之前的版本,jdk1.8之后的版本用的是byte[])

StringBuffer: 可变的字符序列;线程安全的,效率低;底层使用char[]存储

StringBuilder: 可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储.

  1. StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,
  2. 只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的, 而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
  3. 在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全
    StringBuffer的常用方法:
    StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
    StringBuffer delete(int start,int end):删除指定位置的内容
    StringBuffer replace(int start, int end, String str):把[start,end)位置替换 为str
    StringBuffer insert(int offset, xxx):在指定位置插入xxx
    StringBuffer reverse() :把当前字符序列逆转 *
    public int indexOf(String str)
    public String substring(int start,int end):返回一个从start开始到end索引结束的 左闭右开区间的子字符串
    public int length()
    public char charAt(int n )
    public void setCharAt(int n ,char ch)
    总结:
    增:append(xxx)
    删:delete(int start,int end)
    改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
    查:charAt(int n )
    插:insert(int offset, xxx)
    长度:length();
    遍历:for() + charAt() / toString()

public static void main(String[] args) { 
	String str="qwer"; 
	str=str+"123";//新创建"qwer123“对象 
	StringBuffer sb1=new StringBuffer("abc");    
	sb1.append("123"); 
	System.out.println(sb1); 
	//sb1.delete(1,3);//含头不含位 
	System.out.println(sb1); 
	//sb1.replace(1,3,"字母"); 
	sb1.setCharAt(4,'Y'); 
	System.out.println(sb1); 
	sb1.insert(3,"FF"); System.out.println(sb1); 
}

String、StringBuffer、StringBuilder效率对比

public static void main(String[] args) { 
	long startTime=0; 
	long endTime=0; 
	String str=""; 
	StringBuffer sb1=new StringBuffer(""); 
	StringBuilder sb2=new StringBuilder(""); 
	startTime=System.currentTimeMillis(); 
	for ( int i=0;i<40000;i++){ 
		str=str+i;
	}
	endTime=System.currentTimeMillis(); 
	System.out.println("String拼接执行的时间"+(endTime-startTime)); 
	startTime=System.currentTimeMillis(); 
	for ( int i=0;i<40000;i++){ 
		sb1.append(i); 
	}
	endTime=System.currentTimeMillis(); 
	System.out.println("StringBuffer拼接执行的时间"+(endTime-startTime)); 
	startTime=System.currentTimeMillis(); 
	for ( int i=0;i<40000;i++){ 
		sb2.append(i); 
	}
	endTime=System.currentTimeMillis(); 
	System.out.println("StringBuilder拼接执行的时间"+(endTime-startTime)); 
}

StringBuffer、StringBuilder和String的使用场合


综上所述:

操作少,数据少,用String
单线程,操作多,数据多,用StringBuilder
多线程,操作多,数据多,用StringBuffer

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值