在java中有3个类来负责字符的操作:
1、Character是对单个字符进行操作
2、String对一串字符进行操作,是不可变的
3、StringBuffer也是对一串字符进行操作,但是是可变类
——String
是对象不是原始类型
为不可变对象,一旦创建,不可修改
对于已经存在的String对象的修改都是创建一个新的对象,然后把新的值保存进去
String被final修饰,即不能被继承
——StringBuffer
是一个可变对象,只能通过构造函数来建立
StringBuffer sb = new StringBuffer();
对他进行修改的时候不会像String那样重新建立对象
对象被建立后,在内存中就会分配内存空间,并初始保存一个null,向StringBuffer赋值的时候可以通过append()方法;
分别用String、StringBuffer进行字符串的连接操作
public class Test_1 {
static final int TIMES = 10000;
public static void stringReplace(String text){
text = text + "c";
}
public static void buffetReplace(StringBuffer text){
text = text.append("c");
}
public static void test_1(){
String str = "abcdefghijklmnopqrstuvwxyz";
int time = TIMES;
long start = System.currentTimeMillis();
String str2 = "";
for(int i = 0;i < time;i ++){
str2 += str;
}
long end = System.currentTimeMillis();
long times = end - start;
System.out.println(times);
}
public static void test_2(){
String str = "aabcdefghijklmnopqrstuvwxyz";
int time = TIMES;
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for(int i = 0;i < time;i ++){
sb.append(str);
}
long end = System.currentTimeMillis();
long times = end - start;
System.out.println(times);
}
public static void main(String[] args) {
test_1();
test_2();
//4504
//1
// String textString = new String("java");
// StringBuffer textStringBuffer = new StringBuffer("java");
// stringReplace(textString);
// buffetReplace(textStringBuffer);
// System.out.println(textString + textStringBuffer);
}
}
——字符串连接操作中,StringBuffer的效率比String高
String的连接操作:
通过建立一个StringBuffer,然后调用append(),最后再将StringBuffer转换成String
这样,String的连接操作就比StringBuffer多出了一些附加操作,效率降低
由于String对象是不可变对象,每一次操作String都会建立新的对象来保存新的值,这样原来的对象就没用了,会被垃圾回收,也会影响性能。