StringBuilder类
4.1 字符串拼接问题
String类
字符串是常量,他们的值再创建后不能更改。
字符串底层是一个被final修饰的数组,不可改变,是一个常量
private final byte[] value;
进行字符串的相加,内存中就会有很多个字符串,占用空间多,效率低下:
比如
String s = "a"+"b"+"c" = "abc";
"a","b","c" 3个字符串
"a"+"b" "ab" 1个字符串
"ab"+"c" "abc" 1个字符串
4.2 StringBuilder类
字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)
底层也是一个数组,但是没有被final修饰,可以改变长度
byte[] value = new byte[16];
StringBuilder在内存中始终是一个数组,占用空间少,效率高
如果超出了StringBuilder的容量,会自动扩容
4.3 构造方法
根据StringBuilder的API文档,常用的两个构造方法:
public StringBuilder():
构造一个空的StringBuilder容器public StringBuilder(String str):
构造一个StringBuilder容器,并将字符串添加进去
public static void main(String[] args){
// 空参
StringBuilder bu1 = new StringBuilder();
System.out.println(bu1);// (空白)
// 带字符串的构造方法
StringBuilder bu2 = new StringBuilder("abc");
System.out.println(bu2);// (abc)
}
4.4 常用成员方法
StringBuilder常用的方法有两个:
-
public stringBuilder append(。。):添加任意数据类型的字符串形式,病返回自身
public static void main(String[] args){ // 创建StringBuilder对象 StringBuilder bu1 = new StringBuilder(); // 使用append方法添加数组 StringBuilder bu2 = bu1.append("abc");// 把bu1的地址值赋值给了bu2 Systom.out.println(bu1);// abc Systom.out.println(bu2);// abc Systom.out.println(bu1 == bu2); // ture // 使用appen方法无需接收返回值 bu1.appen("a"); bu1.appen("b"); bu1.appen("c"); Systom.out.println(bu1);// abc // 链式编程:方法返回值是一个对象,可以继续调用方法 bu1.appen("a").appen("b").appen("c"); Systom.out.println(bu1);// abc }
-
StringBuilder和string可以相互转换
- stringbuillder-->String:public String toString():将当前的StringBuilder对象转换为String对象
- string-->StringBuillder:可以使用StringBuilder的构造方法StringBuilder(String str)构造一个字符串生成器,并初始化指定字符串的内容
string-->StringBuillder
public static void main(String[] args){
// string-->StringBuillder
String str = "hello";
System.out.println("str"+str);// str
StringBuilder bu = new StringBuilder(str);
// 往StringBuilder里添加数据
bu.append("wold");
System.out.println("bu"+bu);// helloworld
// stringbuillder-->String
String s = bu.toString();
System.out.println("s"+s);// helloworld
}
-
reverse方法
public static void main(String[] args){ StringBuilder str = new StringBuilder(); str.append("j").append("a").append("va"); str.reverse(); System.out.println(str);// avaj }