String类
? 字符串是常量,他们的值再创建后不能更改。
? 字符串底层是一个被final修饰的数组,不可改变,是一个常量
? private final byte[] value;
? 进行字符串的相加,内存中就会有很多个字符串,占用空间多,效率低下:
比如
String s = "a"+"b"+"c" = "abc";
"a","b","c" 3个字符串
"a"+"b" "ab" 1个字符串
"ab"+"c" "abc" 1个字符串
字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)
底层也是一个数组,但是没有被final修饰,可以改变长度
byte[] value = new byte[16];
StringBuilder在内存中始终是一个数组,占用空间少,效率高
如果超出了StringBuilder的容量,会自动扩容
根据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)
}
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可以相互转换
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
}
原文:https://www.cnblogs.com/anke-z/p/12495411.html