字符串的特点

字符串的内容是不会改变的,它的对象在创建后不能被更改
(当给字符串变量赋值时,产生了一个新的字符串,两个字符串相加一共有三个字符串参与)

构造方式

直接赋值

new构造函数

(参数为空,字符串,字节数组,字符数组(string,byte【】,char【】))

字符串的方法

equals(string) ,
equalsIgnoreCase(string) ,
String substring(int beginIndex, int endInde)包头不包尾,包左不包右 返回值是截取的小串
String substring(int beginIndex) 截取到末尾
public char charAt(int index)根据索引返回字符
public int length()返回字符串的长度
public String replace(String target,String replacement)将target替换为replacement

字符串拼接

”+“从左至右拼接,与""(空字符串)拼接可以达到将单个字符拼接成字符串的效果

StringBuilder

一个容器,里面的内容是可变的,提高字符串的操作效率
有一个空参构造和形参是一个字符串的构造方法
public StringBuilder append (任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 反转容器中的内容
public int length() 返回长度(字符出现的个数)
public String toString()把StringBuilder转换为String

StringJoiner

public StringJoiner (间隔符号) 创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner (间隔符号,开始符号,结束符号) 创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号
add()
length()
toString()

图片损坏

修改字符串

substring

用substring进行截取,把左边的字符截取出来拼接到右侧去。

字符数组

把字符串先变成一个字符数组,然后调整字符数组里面数据,最后再把字符数组变成字符串。

字符串原理小结

1.字符串存储的内存原理
直接赋值会复用字符串常量池中的
new出来不会复用,而是开辟一个新的空间
2.== 号比较的到底是什么?
基本数据类型比较数据值
引用数据类型比较地址值
3.字符串拼接的底层原理
如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串。如果有变量参与,会创建新的字符串,浪费内存。
4.StringBuilder提高效率原理
所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存
5.StringBuilder源码分析
默认创建一个长度为16的字节数组
添加的内容长度小于16,直接存
添加的内容大于16会扩容(原来的容量* 2+2)
如果扩容之后还不够,以实际长度为准