1.字符串的分类:
不可变字符串:String
可变字符串:StringBuilder,StringBuffer
2.StringBuilder底层:非常重要的两个属性
public static void main(String[] args) {
// 创建StringBuilder
StringBuilder sb =new StringBuilder();
/**表面上调用空构造器,实际底层是对value数组进行初始化,长度为16
* public StringBuilder() {
* super(16);
* }
*/
StringBuilder sb1 =new StringBuilder(3);
// 表面上调用StringBuilder的有参构造器,传入一个int类型的数,实际底层就是对value数组进行初始化,长度为你传入的数字
StringBuilder sb3 =new StringBuilder("abc");
}
理解可变和不可变的含义
1.String --> 不可变
String a ="abc";
a="abcdef"
不可变:在地址不变的情况下,想把"abc"变成"abcdef"是不可能
2.StringBuilder -->可变
可变,在StringBuilder这个对象的地址不变的情况下,想把"abc"变成"abcdef"是可能的,直接追加即可
StringBuilder sb= new StringBuilder();
System.out.println(sb.append("abc")==sb.append("def")); // true
StringBuilder 常用方法
public static void main(String[] args) {
// 创建StringBuilder
StringBuilder sb = new StringBuilder("Hello World");
// 增
sb.append("你好世界");
System.out.println(sb);
// 删
System.out.println(sb.delete(5, 11));//删除位置[3,11)上的字符
sb.charAt(5); // 删除位置5的字符
System.out.println(sb);
// 改 -->插入
sb.insert(5,",");
System.out.println(sb);
// 改 -->替换
sb.replace(0,5,"我好累");
System.out.println(sb);
sb.setCharAt(3,'!');
System.out.println(sb);
//查
for (int i=0;i<sb.length();i++){
System.out.print(sb.charAt(i) + "\t");
}
System.out.println();
//首尾替换
System.out.println(sb.reverse());
// 截取
System.out.println(sb.substring(4, 8));
}
StringBuffer 常用方法
public static void main(String[] args) {
// 创建StringBuilder
StringBuffer sb = new StringBuffer("Hello World");
// 增
sb.append("你好世界");
System.out.println(sb);
// 删
System.out.println(sb.delete(5, 11));//删除位置[3,11)上的字符
sb.charAt(5); // 删除位置5的字符
System.out.println(sb);
// 改 -->插入
sb.insert(5,",");
System.out.println(sb);
// 改 -->替换
sb.replace(0,5,"我好累");
System.out.println(sb);
sb.setCharAt(3,'!');
System.out.println(sb);
//查
for (int i=0;i<sb.length();i++){
System.out.print(sb.charAt(i) + "\t");
}
System.out.println();
//首尾替换
System.out.println(sb.reverse());
// 截取
System.out.println(sb.substring(4, 8));
}
String,StringBuffer,StringBuilder的区别与练习
1.String 类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁.
2.StringBuffer类则代表一个字符序列可变的字符串,可以通过append,insert,reverse,setCharAt,setLength等方法改变其内容.一旦生成了最终的字符串,调用toString方法将其转变为String
3.JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法与方法基本相同.不同的是StringBuilder是线程安全的,而StringBuilder是线程不安全的,所以性能略高.通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder
StringBuilder :JDK1.5 效率高 线程不安全
StringBuffer :JDK1.0 效率低 线程安全