1. StringJoiner:StringJoiner跟StringBuilder一样,也可以看成是容器,创建后其中的内容是可变的。
作用:提高字符串的操作效率,而且代码简洁
2. StringJoiner的构造方法
public StringJoiner(间隔符号):创建一个StringJoiner的对象,指定拼接的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号):创建一个StringJoiner对象,指定拼接的间隔符号,开始符号,结束符号
3. StringJoiner的成员方法
public StringJoiner add(添加的内容):添加数据,并返回对象本身
注意:add()方法只能添加字符串类型
public int length():返回长度(所有字符出现的个数)
public String toString():返回一个字符串(该字符串就是拼接之后的结果)
4. (1):字符串储存的内存原理
· ·直接赋值会复用字符串常量池中的
· ·new出来的不会复用,会开辟一个新的空间
(2):字符串拼接原理
· ·如果拼接过程中没有变量的参与,只有字符串的情况下,代码会在编译的时候直接生成拼接后的结果
例如:s = “a” + “b”
编译后即为s = “ab”,然后再打印s
· ·如果拼接过程中有变量的参与
JDK8以前:系统会先创建一个StringBuilder对象,使用append方法将要拼接的对象添加到StringBuilder中,然后利用toString方法,将其转换成String对象,这样就会创建两个新的对象
JDK8以后:系统会先预估拼接后的字符串有多长,然后再新建一个数组,将各个所需拼接的字符串放入其中,随后完成拼接,这样会新建一个字符串
· ·无论是JDK8以前还是以后,使用+进行拼接,有变量参与的情况下,都会产生新的对象,会浪费空间和时间,所以在拼接字符串的时候最好不要使用+号直接进行拼接,可以创建StringBuilder对象或者StringJoiner对象来拼接
5. StringBuilder提高效率的原理:
所有要拼接的内容都是直接放到StringBuilder中,不会创建很多无用的空间,节约内存
6. StringBuilder的原理
· ·默认创建一个容量为16的字节数组
· ·添加的内容小于16,直接存入字符对应的ASCII码值
· ·若一次存入的内容超出16,就会扩容,扩容容量为老容量*2+2即34
· ·若一次存入的内容超出34,则以实际长度为准
长度是实际装了的,容量是最大能装多少