我们知道String可以可以看作是数组,长度是不可变的(也就是我们常说的不可变字符串)。String实际上是内部封装成数组,但不代表字符串本身就是个数组。也就是说,我们不能像访问数组一样通过首地址+索引的方式来访问字符串,但String类型中封装了一系列的API接口来实现它,像charAt();那么如果我们想将字符串实现想动态数组那样可以动态添加字符串的功能怎么办呢?Java推出了类StringBuilder来构建动态字符串。其格式是:
StringBuilder builder=new StringBuilder;
当需要添加内容时,可以使用builder.append("...")来动态的添加字符串。
当你想获取这个字符串的值时,可以调用builder.toString()方法。
StringBuilder的原理介绍
那么StringBuilder类的原理是什么呢?让我们来看看源码:
可以看出类StringBuilder是继承了AbstractStringBuilder,我们再来看看AbstractStringBuilder类的源码:
我们可以看到StringBuilder类new实例时,是创建了一个大小为16的char类型数组。然后我们看看StringBuilder是怎么动态添加字符串的:
从上图我们可以看出StringBuilder在添加字符串时,会先通过调用ensureCapacityInternal()来扩展字符串的长度。;然后通过getChars()方法实现对字符串的动态添加。