1.String
1.1 String的介绍
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
String不能被任何类所继承,而且一旦一个String对象被创建, 包含在这个对象中的字符序列是不可改变的, 包括该类后续的所有方法都是不能修改该对象的,直至该对象被销毁。实现了 Serializable接口,这是一个序列化标志接口,还实现了 Comparable 接口,用于比较两个字符串的大小(按顺序比较单个字符的ASCII码),后面会有具体方法实现;最后实现了 CharSequence 接口,表示是一个有序字符的集合。
CharSequence与String都能用于定义字符串,但CharSequence是个接口,Sting实现了它。 所以也可以把CharSequence看做String的父类。
1.2 String的四种初始化
public class test {
public static void main(String[] args) {
//1.直接赋值,在堆中的常量池中创建该字符串对象
String str1="hello";
System.out.println("str1 = " + str1);
//2.通过构造方法创建对象
//在堆中创建对象,并把该对象的拷贝放到常量池中
String str2 = new String("hello");
System.out.println("str2 = " + str2);
//3.通过字符数组创建对象
//首先创建字符数组,并且通过构造方法传入此数组来创建对象,此对象不入常量池
char[] chars =new char[]{'b', 't', 'd'};
String str3 = new String(chars);
//String str3 = new String(new char[]{'b', 't', 'd'});
System.out.println("str3 = " + str3);
//4.通过String类的静态方法valueOf(任意数据类型)->转为字符串
String str4 = String.valueOf("dc");
System.out.println("str4 = " + str4);
String str5 = String.valueOf(15);
System.out.println("str5 = " + str5);
}
}
1.3 String类常见的操作
参考链接:https://blog.csdn.net/xu130130/article/details/50297517
2.StringBuffer类
2.1 StringBuffer类介绍
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
在Java中,由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容是不可以改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。而StringBuffer类(也称字符串缓冲区)来操作字符串。 String和StringBuffer最大的区别是StringBuffer的内容和长度是可以改变的,StringBuffer类似于一个字符容器,当其添加或者删除字符时,所操作的都是这个字符容器,因此不会产生新的StringBuffer对象。
2.2 StringBuffer类的常用方法
方法申明 | 功能描述 |
---|---|
StringBuffer append(String str) | 添加字符到StringBuffer对象中末尾 |
StringBuffer insert(int offset, String str) | 在StringBuffer对象中的offset位置插入字符串str |
StringBuffer deleteCharAt(int index) | 移除StringBuffer对象中指定位置的字符 |
StringBuffer delete(int start, int end) | 移除StringBuffer对象中指定范围的字符或字符串 |
StringBuffer replace(int start, int end, String str) | 将StringBuffer对象中指定范围的字符或字符串用新的字符串str代替 |
void setCharAt() | 修改指定位置index处的字符 |
String toString() | 返回StringBuffer缓冲区中的字符串对象 |
StringBuffer reverse() | 将此StringBuffer对象用其反转的形式取代 |
3.StringBuilder类
3.1 StringBuilder类的介绍
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
jdk1.5以后出现了功能和StringBuffer一模一样的对象,就是StringBuilder。 StringBuilder类是一种线程不安全的类,是一种字符串缓冲区,可存储任意类型数据,进去之后变成可变字符串。它效率高的特点十分突出,该类常用于字符串拼接操作,对比普通String类的拼接,速度约是10的3次方倍。在拼接完成后,再用toString()方法转为String类进行其它操作。
3.2 StringBuilder类的常用方法
与StringBuffer相同(可以看源码)
4.String,StringBuilder,StringBuffer的区别
-
① String类定义的字符串是常量,内容和长度是无法改变的。StringBuffer表示字符容器,其内容和长度可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类即可,但是如果需要对字符串进行增删操作,则使用StringBuffer类。 参考链接:https://blog.csdn.net/qq_46649587/article/details/106981825
-
② String重写了Object的equals()方法,而StringBuffer类和StringBuilder没有重写equals()方法。
-
③ String类对象可以用操作符+进行连接,,而StringBuffer和StringBuilder对象之间不能。
-
④ StringBuffer和StringBuilder两者的区别:a. StringBuffer和StringBuilder的功能相似,且两个类中的提供的方法基本相同。 b. StringBuffer是线程同步的,并且线程安全,通常用于多线程。 c. StringBuilder是线程不同步的,所以性能略高,通常用于单线程。故StringBuilder如果需要这样的同步,可以使用StringBuffer或者自己用加同步锁。