7.字符串
1.字符串简介
- 底层使用
char[]
存储字符数据,从java9
开始,底层使用byte[]
存储字符数据。 - 所有字符串字面量(比如”abc”)都是String类的实例。
1
2
3
4String str = "abc";
// 相当于
String str = new String("abc"); - String对象一旦创建完成,它的字符内容是不可以修改的。
- String对象的引用指向是可以修改的。(间接说明java只有值传递,没有引用传递)
1
2
3
4
5
6
7
8String s = "555";
s = "666"; // s指向了"666"
test(s); // s的指向依然是"666"
println(s); // 666
void test(String str){ // str指向666
str += "555"; // str 指向666555
}
2.字符串初始化
1 | String s1 = "mj" |
3.字符串常量池:String Constant Pool(简称SCP)
- 从java7开始属于堆空间的一部分(以前放在方法区)
- 当遇到字符串字面量时,会去查
SCP
(查到就返回,查不到就创建新的) A.intern()
- 如果
SCP
中存在与A内容相同的字符串对象C时,就返回C。 - 否则,将A加入到
SCP
中,并返回A。
- 如果
例1:
1 | String s1 = "mj"; |
例2:
1 | String s1 = new String("abc"); |
4.StringBuilder:
在进行大量字符串的改动操作时(如拼接、替换)
- 使用String会消耗内存,降低程序性能。
- 使用StringBuilder可节省内存,提高程序性能。
- StringBuilder常用方法:
append
、insert
、delete
、replace
、reverse
注意:
StringBuilder并不是String的子类 或 父类
StringBuilder
、String
都实现了CharSequence
接口1
2StringBuilder sb = new StringBuilder();
sb.append("123").append("456"); // 因为append()的返回值是thisStringBuilder的默认容量是16, 扩容后的新容量是原来容量的 2倍+2
5.格式化输出:
可以使用System.out.printf() 或 System.out.format() 实现格式化输出。
1
System.out.printf("my name is %s", name);
可使用String.format() 对字符串进行格式化。
1
String str = String.format("my name is %s", name);
6.字符串截取
7.字符串常用方法
1 | // 去除左右两边的空格 |