String
定义
-
String s = new String("abc");
用new来创建对象,存放在堆中,每调用一次就会创建一个新的对象。 -
String s = “abc”;
先在栈中创建一个对String类的对象引用变量,然后查找栈中有无"abc",若没有,则将"abc"放进栈,并将s指向"abc";若已经有"abc",则令s直接指向"abc" .
StringBuilder
为什么Java需要有StringBuilder?
String可以直接使用'+'
对字符串进行连接处理,但是每次都会创建新的对象,抛弃旧的对象,所以效率很低。StringBuilder能够高效拼接字符串
定义
StringBuilder str = new StringBuilder(1024);
StringBuilder
对象是可变对象,可预分配缓冲区
StringBuilder sb = new StringBuilder(1024);
for (int i = 0; i < 1000; i++) {
sb.append(',');
sb.append(i);
}
//输出 ,1,2,3,4,5,6,............
//起到直接连接的作用
var sb = new StringBuilder(1024);
sb.append("Mr.")
.append("Bob")
.append("!")
.insert(0, "Hello ");
System.out.println(sb);
//输出Hello Mr.Bob!
//这是StringBuider的链式语法
StringJoiner
定义
StringJioner sj = new StringJoiner(", ","Hello ","!");
StringJoiner
对象不但可以拼接字符串,还可以自动增加开头和结尾
var sj = new StringJoiner(", ","Hello ","!");
for (String name : names) {
sj.add(name);
}
System.out.println(sj.toString());
//Hello Bob, Alice, Grace!
//自动增加开头"Hello"和结尾"!"
备注
String本身也提供了字符串拼接的静态方法
var s = String.join(",",names);
System.out.println(s);
//输出 Bob,Alice,Grace