StringBuilder的介绍

StringBuilder:

	可以允许修改的字符序列。new StringBuilder()的时候,默认分配16个字符的字符缓存区。需要修改字符序列的内容或者长度,一般有append、inset方法可以修改字符序列的内容与长度

1.说明

	当字符串需要进行修改的时候,特别是字符串经常改变的情况下,并且无须考虑多线程情况下,就可以使用StringBuider。原因:如果使用String 进行修改操作的话,那么堆内存中会保留大量多余的对象在内存中,可能会造成线程执行效率低,极大影响了程序的性能问题。

2.特点

	2.1.线程不安全
		多个方法都没有使用Java的线程同步机制,所以多条线程同时对于StringBuider的内容修改或者长度修改时,会出现数据混乱、丢失的情况		
			
	2.2.初始化时,不可以空赋值
	
	2.3.内容、长度可变
		StringBuilder中的value数组是没有使用fianl关键词修饰的,所以value数组内的值是可以改变的。
		扩容机制:
			jdk1.6源码分析,由源码分析得出:如果字符串长度大于初始化长度(16),那么StringBuffer就会进行扩充容量==》当前容量大小加1乘以2
 /**
    * This implements the expansion semantics of ensureCapacity with no
    * size check or synchronization.
    */
   void expandCapacity(int minimumCapacity) {
        int newCapacity = (value.length + 1) * 2;
       if (newCapacity < 0) {
           newCapacity = Integer.MAX_VALUE;
       } else if (minimumCapacity > newCapacity) {
        newCapacity = minimumCapacity;
        }
       value = Arrays.copyOf(value, newCapacity);
   }
		jdk1.8源码分析,由源码分析得出:如果字符串长度大于初始化长度(16),那么StringBuffer就会进行扩充容量==》当前容量大小乘以2加2(算法:当前容量长度二进制左移1位,再加2)
/**
 * Returns a capacity at least as large as the given minimum capacity.
 * Returns the current capacity increased by the same amount + 2 if
 * that suffices.
 * Will not return a capacity greater than {@code MAX_ARRAY_SIZE}
 * unless the given minimum capacity is greater than that.
 *
 * @param  minCapacity the desired minimum capacity
 * @throws OutOfMemoryError if minCapacity is less than zero or
 *         greater than Integer.MAX_VALUE
 */
private int newCapacity(int minCapacity) {
    // overflow-conscious code
    int newCapacity = (value.length << 1) + 2;
    if (newCapacity - minCapacity < 0) {
        newCapacity = minCapacity;
    }
    return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
        ? hugeCapacity(minCapacity)
        : newCapacity;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值