public
void
setLength(int
newLength)设置字符序列的长度。序列将被更改为一个新的字符序列,新序列的长度由参数指定。对于每个小于
newLength
参数的非负索引
k,如果
k
小于原字符序列的长度,则新字符序列索引
k
处的字符与原字符序列索引
k
处的字符相同;否则,新字符序列索引
k
处的字符将是
null
字符
'\u0000'。换句话说,如果
newLength
参数小于当前长度,则长度将更改为指定的长度。
如果
newLength
参数大于或等于当前长度,则将追加有效的
null
字符
('\u0000'),使长度满足
newLength
参数。
newLength
参数必须大于或等于
0。
参数:
newLength
-
新长度
抛出:
IndexOutOfBoundsException
-
如果
newLength
参数为负。
每次对字符串修改,底层都会重新开辟新的堆内存空间,这样会开辟很多个空间地址,造成浪费。
如果需要对字符串进行频繁拼接的话,建议使用StringBuffer或者StringBuilder,两者的使用方法一致,下面以StringBuffer为例说明。
StringBuffer是一个字符串缓冲区,如果需要频繁的对字符串进行拼接时,建议使用StringBuffer。
工作原理
StringBuffer的底层是byte数组(jdk9之后),jdk8中底层是char数组,如果没有明确设定,则系统会默认创建一个长度为16的byte类型数组,在使用时如果数组容量不够了,则会通过数组的拷贝对数组进行扩容,所以在使用StringBuffer时最好预测并手动初始化长度,这样能够减少数组的拷贝,从而提高效率。
String与StringBuffer的区别?
String是不可变字符序列,存储在字符串常量池中
StringBuffer的底层是byte数组,系统会对该数组进行扩容
如何使用StringBuffer进行字符串拼接?
StringBuilder和StringBuffer的区别
通过API可以看到StringBuilder和StringBuffer里面的方法是一样的,那他们有什么区别呢?
StringBuffer是jdk1.0版本中加入的,是线程安全的,效率低
StringBuilder是jdk5版本加入的,是线程不安全的,效率高
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)