Java中StringBuffer类的setLength()方法

Java中StringBuffer类的setLength()方法,第1张

setLength

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版本加入的,是线程不安全的,效率高


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8130390.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存