字符串的各种方法
- String substring(int beginIndex, int endIndex); 截取
注意: 包头不包尾 包左不包右
只有返回值是截取的小串 - String substring(int beginIndex) 截取到末尾
- String replace(旧值,新值); 替换
只有方法的返回值是替换之后的结果
StringBuilder对象 字符串操作快捷工具
StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的
用于提高字符串的操作效率
String会产生很多没有用的中间字符串,影响内存且降低了运行效率
构造方法
public StringBuilder()
public StringBuilder(String str)
成员方法
public StirngBuilder append(任意类型)
public StringBuilder reverse() 反转容器中的内容
public int length()
public Stirng toString()
StringJoiner
偷懒是程序员的美好品格
也可以看成一个容器,创建之后里面的内容是可以改变的
构造方法 没有空参构造呦
public StringJoiner(间隔符号)
public StringJoiner(间隔符号,开始符号,结束符号)
成员方法
public StirngJoiner add(添加的内容) 目前为止只能添加字符串
public int length()
public String toString()
总结
String 很多方法
StringBuilder 拼接与反转
StringJoiner 拼接 JDK8 指定开始结束间隔标记
字符串原理
- 直接赋值 可以复用字符串常量池
- new 开辟堆中新空间
- == 比较的是数据值(基本) 和 地址值(引用)
- 引用数据类型使用**.equals()方法!**(否则比较地址没有意义)
- 拼接原理
拼接原理
- 拼接的时候(等号左边)没有变量,都是字符串。
触发字符串的优化机制,在编译的时候(.java文件)就已经是最终的结果了 - 拼接的时候有变量,JDK8前:new StringBuilder().append(s1).append(“b”).toString();
(一个加号,堆内存中两对象,非常浪费性能)
JDK8的优化:预估长度并创建数组,然后把数组变成字符串
toString方法的底层是直接new了一个字符串对象
关键点就是在等号右边有没有字符串变量
StringBuilder源码分析
扩容: 老容量2 + 2 = 34
但是如果超出了2 + 2的容量则以实际容量为准