这是我参与更文挑战的第13天,活动详情查看: 更文挑战
java提供了String类、StringBuffer类、StringBuilder类来封装字符串。
String类是不可变类,即一旦一个String对象被创建以后,这个对象中的字符序列是不可变的。
StringBuffer类创建的对象的字符串序列是可变的。
StringBuilder类和StringBuffer类基本相似,两个类的构造器也基本相同。不同的是,StringBuffer
是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高,因此在创建可变字符串对象
时应该优先考虑StringBuilder类
String类
创建字符串
1. 使用String创建
2. 使用new关键字创建
public class Test {
public static void main(String[] args) {
String str1 = "abcd";
String str2 = "abcd";
String str3 = str1;
String str4 = new String("abcd");
String str5 = new String("abcd");
System.out.println(str1==str2);
System.out.println(str2==str3);
System.out.println(str1==str3);
System.out.println(str4==str5);
System.out.println(str1==str4);
}
}
从结果可以看出,使用String直接创建的字符串如果具有相同的值,则具有相同的引用,而使用new关键字创建的字符串则引用不同。
这是因为String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上。(这里大家好好体会一下,自己亲自动手试一下吧。)
String类提供了11种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:
public class Test {
public static void main(String[] args) {
char[] arrStr = {'a','b','c','d'};
String str = new String(arrStr);
System.out.println(str);
}
}
这些构造方法具有一些特殊用途,大家可以深入学习。
String类中也有几十个方法操作字符串,这里不可能一一列举出来,大家用到的时候可自行查阅JAVA的API文档。(查阅API文档也是我们要必须会的技能哦!)
StringBuffer类和StringBuilder类
前面已经说过,这两个类之间的区别就是StringBuilder类是没有线程安全功能的,而StringBuffer类是具有线程安全功能的。 两个类都具有一系列插入,追加改变字符串的方法。
我们来看一个例子来了解一下;
public class Test {
public static void main(String[] args) {
StringBuilder str = new StringBuilder();
str.append("world");//str = world
str.insert(0,"hello "); //str = hello world
str.replace(5,6,",");////str = hello,world
str.delete(5,6);////str = helloworld
str.reverse();//str = dlrowolleh
System.out.println(str.length());// 10
str.setLength(5);//str = dlrow
System.out.println(str);
}
}