String、StringBuffer、StringBuilder三者的联系

String

  • String只能赋值一次,每一次内容发生改变都会生成一个新的对象,然后原有对象引用新的对象,所以说String本身是不可以改变的。每一次生成新的对象都会对系统性能产生影响,会降低java虚拟机的工作效率。

StringBuffer和StringBuilder

  • 这两个都有toString()方法,可以返回字符序列的字符串表现形式

  • 初始化时可以通过字符串作为参数,指定初始化的字符序列内容

  • 这两个每次操作都是对自身对象的操作,并不会生成新的对象,其所占空间会随着字符内容的增加而扩充,做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。

  • 不同点是:

  • StringBuffer的方法都使用了“synchronize”关键字修饰,即线程安全;

  • StringBuilder不具备这样特点,没有线程安全机制,所以运行效率会比StringBuffer高。

API

  • StringBuffer和StringBuilder两者的API完全一致,只是为了提高效率而放弃了线程安全机制。
  1. append()
    将参数转换为字符串,将所得字符串中的字符追加到此序列中
    字符串大量拼接时用String的“+”效率低,可以使用StringBuilder调用append()方法,效率高。
    在这里插入代码片
  2. setCharAt(int index,Char ch)
    将给定索引处的字符修改为ch
  3. insert(int offset,String str)
    将字符串插入到指定索引处,顺延
  4. reverse()
    将字符串反序输出
  5. delete(int start,int end)
    从start索引处开始,一直到end-1(包头不包尾)处,移除这些字符。如果end-1超出索引范围,则一直到序列尾部。
  6. 这两者还有类似String的方法
    length()
    charAt()
    indexOf()
    lastIndexOf()
    substring()
    replace()

关于大量字符串拼接的效率验证

public static void main(String[] args) {
		String str = "";
		long startTime = System.currentTimeMillis();
		for (int i = 0; i <= 10000; i++) {
			str += i;
		}
		long endTime = System.currentTimeMillis();
		long time = endTime - startTime;
		System.out.println(time);

		StringBuilder sb = new StringBuilder("");
		startTime = System.currentTimeMillis();
		for (int i = 0; i <= 50000; i++) {
			sb.append(i);
		}
		endTime = System.currentTimeMillis();
		time = endTime - startTime;
		System.out.println(time);
	}
  • 拼接使用时间如下:

在这里插入图片描述

三者的总结:

类型StringStringBufferStringBuilder
对象类型字符串常量字符串变量字符串变量
线程安全性不安全安全不安全
执行效率
适用场景操作少 数据少多线程 操作多 数据多单线程 操作多 数据多
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值