java开篇之作,来聊一聊java中的字符串相关…
字符串比较
创建过程
字符串的常用创建方式有两种。一种是字面量的方式创建,另一种是使用new关键字创建。
第一种创建方式,jvm会首先在字符串常量池中检查是否存在该字符串。如果不存在,则在字符串常量池中创建字符串对象,返回其内存地址;如果存在,则直接返回该对象的内存地址。
第二种创建方式,jvm也会首先在字符串常量池中检查是否已经存在,如果已存在,则将其拷贝到堆内存中,并返回堆内存中的内存地址。如果不存在,就会在堆内存中创建字符串对象,返回其内存地址。
比较符
使用==
比较时,比较的是内存地址。
使用equals()
比较时,比的是字符串的内容(字符串类重写了继承自Object的equals())。
总结
- 使用字面量方式创建的字符串对象在字符串常量池中
- 使用new关键字创建的对象在堆内存中
- 字符串之间的比较使用
equals()
就好 - 比较一个变量是否为某个字符串时,使用
字符串.equals(变量)
来判断,避免报错
String类的方法
构造方法
1 | /* 使用字节数组构建字符串(使用平台默认编码规则) */ |
获取方法
1 | // 获取字符串长度 |
判断方法
1 | // 判断是否以指定字符结束 |
转换方法
1 | // 将字符数组转换为字符(可以指定开始位置与长度) |
其他方法
1 | String replace(char oldChar, char newChar); // 替换 |
StringBuffer与StringBuilder
由于String是不可变的,所以在需要频繁改变字符串对象的应用中,需要使用可变的字符串缓冲区类。
默认缓冲区的容量是16。
StringBuffer与StringBuilder的用法类似,区别在于StringBuilder是线程不安全的,但是效率要高。
常用方法
1 | /* 添加方法 */ |