Java——String、StringBuffer和StringBuilder类

263 阅读2分钟

这是我参与更文挑战的第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);
	}
}

image.png 从结果可以看出,使用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);
	}
}

image.png 这些构造方法具有一些特殊用途,大家可以深入学习。

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);
	}
}