String和StringBuffe区别

JAVA提供了两个可以储存和操作字符串的类:String和StringBuffer。
我们知道String类提供了数值不可改变字符串,而StringBuffer类提供的字符串进行修改,该类有StringBuffer(),StringBuffer(int size),StringBuffer(String s)三个改造方法。
初始化的容量:



扩容:
当使用append()方法在字符串后面追加东西的时候,如果长度超过了该字符串存储空间大小了就需要进行扩容:构建新的存储空间更大的字符串,将久的复制过去;
 StringBuffer进行字符串append添加的时候,会先计算添加后字符串大小,并传给方法:ensureCapacityInternal()

改方法判断是否扩容,若需要则调用expandCapacity方法进行扩容。如下:


解释:
1. 首先尝试将新容量扩为大小变成 2倍+2。
2. 若满足需要,新容量为该计算值。

3. 若不满足,直接扩容成字符串长度。


例子:
例子一:根据2倍+2进行扩容。

	@Test
	public void testStringBuffer() {
		StringBuilder sb = new StringBuilder();
		System.out.println("         length    " + "capacity    " + "Will append length ");
		System.out.println("Before   "+sb.length() + "         " + sb.capacity()+"           16");
		sb.append("12345678901234567");// add 16
		System.out.println("After    "+sb.length() + "        " + sb.capacity()+"           18");
		
		sb.append("1234567890123456789");// add 18
		System.out.println("After    "+sb.length() + "        " + sb.capacity());
		System.out.println();
	}

结果:

         length    capacity    Will append length 
Before   0         16           16
After    17        34           18
After    36        70


例子二:直接扩容成实际需要的长度。

	@Test
	public void testStringBuffer2() {
		StringBuilder sb = new StringBuilder();
		System.out.println("         length    " + "capacity    " + "Will append length ");
		System.out.println("Before   "+sb.length() + "         " + sb.capacity()+"           36");
		sb.append("123456789012345671234567890123456789");// add 16
		System.out.println("After    "+sb.length() + "        " + sb.capacity());
		
		System.out.println();
	}
输出:

         length    capacity    Will append length 
Before   0         16           16
After    36        36




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值