1.String
不可变字符串
String - Java 11中文版 - API参考文档 (apiref.com)
public static void main(String[] args)
{
String a = new String("A");
char [] test1 = new char[3];
test1[0] = '1';test1[1] = '2';test1[2] = '3';
String b = new String();
String C = new String(test1);
String D = new String(test1,0,2);
System.out.println(a+'\n'+b+'\n'+C+'\n'+D);
System.out.println(a.isEmpty());
System.out.println(b.isEmpty());
System.out.println(C.length());
String d = D.repeat(15);
System.out.println(d);
}
2.Stringbuffer
可变字符串,线程安全。
public static void main(String[] args)
{
StringBuffer a = new StringBuffer("A");
a.append(true);
a.append('B');
a.append(12.345678);
System.out.println(a);
System.out.println(a.capacity());
a.insert(4,"abdcd");
a.insert(5,true);
System.out.println(a);
a.delete(1,9);
System.out.println(a);
a.reverse();
System.out.println(a);
System.out.println(a.substring(1,4));
}
3.stringbuilder
不线程安全的可变字符串
public static void main(String[] args)
{
StringBuilder a = new StringBuilder("A");
a.append(true);
a.append('B');
a.append(12.345678);
System.out.println(a);
System.out.println(a.capacity());
a.insert(4,"abdcd");
a.insert(5,true);
System.out.println(a);
a.delete(1,9);
System.out.println(a);
a.reverse();
System.out.println(a);
System.out.println(a.substring(1,4));
}
显然,string是固定字符串,适合做标记或者传输或者临时存储。
stringbuilder比stringbuffer快,不涉及线程安全的时候用stringbuilder,反之yongstringbuffer
3.开发的时候不用+做拼接
String str="";
for(int i=0;i<10;i++){
str+="a";
}
str=str+"a"+"b";
//据说是反编译代码
String str = "";
for(int i = 0; i < 10; i++)
str = (new StringBuilder()).append(str).append("a").toString();
str = (new StringBuilder()).append(str).append("a").append("b").toString();
好暴力的优化,简直跟没有优化一样。不过也正常,因为要保证str的类型不被转换,只能这样办了, 如果封装成函数的话会快不少呢。