StringBuffer\StringBuilder
字符串缓冲区\字符串建造者,存放了一个String(char数组),但是可以修改(没有被final修饰)
Buffer是线程安全的,Builder是线程不安全的
常用方法:
String str = "hello world";
// 1.构造方法
StringBuilder sb = new StringBuilder(str);
// 2.在字符串缓冲区后追加一个字符串
sb.append(" java");
// 3.将 StringBuilder对象转化为String对象
str = sb.toString();
// 4.在指定的索引处添加字符串
sb.insert(6 , "SB");
// 其他的方法同String类
// StringBuffer的方法和StringBuilder一致
注意事项:
String的“+”拼接字符串,底层实现的是StringBuilder的append方法
1. 将字符串作为构造方法的参数创建StringBuilder对象
2. 调用append方法拼接字符串
3. toString转为字符串
最佳实践:
在字符串操作频繁的代码中(如:循环的内部),建议手动创建StringBuilder类,然后使用StringBuilder的方法操作字符串,最后赚回String类的对象
字符串常量池
- 存在于堆中
- 使用字符串优化的方式创建字符串对象(String str = “hello”),这个字符串对象会存放在字符串常量池中。
- 再次使用字符串优化的方式创建对象,会先检查字符串常量池中是否存在相同对象,如果存在,指向同一个对象,不在会新建一个对象
String str1 = "hello";
String str2 = "hello";
String str3 = "world";
System.out.println(str1.equals(str2));//true
System.out.println(str1.equals(str3));//false
System.out.println(str1 == str2);//true
System.out.println(str1 == str3);//false