目录
- 一、String
- 1.1 String介绍
- 1.2 深入理解String的不可变性
- 1.3 String 操作字符串方法
- 二、StringBuffer
- 2.1 StringBuffer介绍
- 2.2 StringBuffer 构造方法
- 2.3 StringBuffer 常用方法
- 三、StringBuilder
- 2.1 StringBuffer介绍
- 四、String,StringBuffer ,StringBuilder 区别
- 最后
一、String
1.1 String介绍
- String 类代表的字符串,程序中任何字符串都是String类的对象
public final class String extends Objectimplements Serializable, Comparable<String>, CharSequence
- 字符串是常量;它们的值在创建之后不能更改。
- 通过上图发现String 被final修饰,所以字符串的值创建之后就不可以被修改,具有不可变性
1.2 深入理解String的不可变性
- 通过字面量方式为字符串赋值时,此时的字符串存储在方法区的字符串常量池中,并且在字符串常量池中不会存储相同内容的字符串。
- 也就是说,s1 和 s2 指向同一地址
那么你可能会说,我重新给s1 赋值,他不就改变了吗?那还有什么不可变性呢
- 看上图就知道了,给s1重新赋值,,只是在字符串常量池又new 了一新的字符串,原先的”abc“并没有被改变。
1.3 String 操作字符串方法
- 大家可以点下面链接,总结很详细
String 方法详细总结及归类
二、StringBuffer
2.1 StringBuffer介绍
- 也就是因为String类字符串定义后不能改变,所以提供了StringBuffer类(字符串缓冲区)来操作字符串。
- 可将字符串缓冲区安全地用于多个线程
- 看完上面,你也就知道String 和StringBuffer的最大区别了
- 那就是StringBuffer创建的字符串可以改变
2.2 StringBuffer 构造方法
既然是类,那当然有构造方法啦,有了构造方法就可以创建StringBuffer类的字符串了
- 可不可以像String那样创建呢?
看来是不行的,那该如何创建呢? - 当然就像普通类一样啦,new 对象啦!
- 首先要知道构造方法是啥
声明 | 方法描述 |
---|---|
StringBuffer() | 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 |
StringBuffer(CharSequence seq) | public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。 |
StringBuffer(int capacity) | 构造一个不带字符,但具有指定初始容量的字符串缓冲区。 |
StringBuffer(String str) | 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容 |
创建字符串
StringBuffer sbf = new StringBuffer("java");
这样就创建了一个可变的字符串了
2.3 StringBuffer 常用方法
有了对象就可调用方法了,下面就演示一些方法
- 两个最常用方法 append() 和 insert() 方法
- append()
声明 | 方法描述 |
---|---|
StringBuffer append(boolean b) | 将 boolean 参数的字符串表示形式追加到序列。 |
StringBuffer append(char c) | 将 char 参数的字符串表示形式追加到此序列。 |
StringBuffer append(char[] str) | 将 char 数组参数的字符串表示形式追加到此序列。 |
StringBuffer append(char[] str, int offset, int len) | 将 char 数组参数的子数组的字符串表示形式追加到此序列。 |
StringBuffer append(CharSequence s) | 将指定的 CharSequence 追加到该序列。 |
StringBuffer append(CharSequence s, int start, int end) | 将指定 CharSequence 的子序列追加到此序列。 |
StringBuffer append(double d) | 将 double 参数的字符串表示形式追加到此序列。 |
StringBuffer append(float f) | 将 float 参数的字符串表示形式追加到此序列。 |
StringBuffer append(int i) | 将 int 参数的字符串表示形式追加到此序列。 |
StringBuffer append(long lng) | 将 long 参数的字符串表示形式追加到此序列。 |
StringBuffer append(Object obj) | 追加 Object 参数的字符串表示形式。 |
StringBuffer append(String str) | 将指定的字符串追加到此字符序列。 |
StringBuffer append(StringBuffer sb) | 将指定的 StringBuffer 追加到此序列中。 |
- 看着表格里append 方法好像很多,其实只是重载的多,传入参数不同
- 而且都是追加在末尾了,看演示代码就知道了
sbf.append("666");// 在末尾追加System.out.println(sbf);//java666
2.insert
声明 | 方法描述 |
---|---|
StringBuffer insert(int offset, char c) | 将 char 参数的字符串表示形式插入此序列中。 |
StringBuffer insert(int offset, char[] str) | 将 char 数组参数的字符串表示形式插入此序列中。 |
StringBuffer insert(int index, char[] str, int offset, int len) | 将数组参数 str 的子数组的字符串表示形式插入此序列中。 |
StringBuffer insert(int dstOffset, CharSequence s) | 将指定 CharSequence 插入此序列中。 |
StringBuffer insert(int dstOffset, CharSequence s, int start, int end) | 将指定 CharSequence 的子序列插入此序列中。 |
StringBuffer insert(int offset, double d) | 将 double 参数的字符串表示形式插入此序列中。 |
StringBuffer insert(int offset, float f) | 将 float 参数的字符串表示形式插入此序列中。 |
StringBuffer insert(int offset, int i) | 将 int 参数的字符串表示形式插入此序列中。 |
StringBuffer insert(int offset, long l) | 将 long 参数的字符串表示形式插入此序列中。 |
StringBuffer insert(int offset, Object obj) | 将 Object 参数的字符串表示形式插入此字符序列中。 |
StringBuffer insert(int offset, String str) | 将字符串插入此字符序列中。 |
- 跟append 一样,重载的多
- insert方法可以让你以指定位置插入,append 只能在末尾加
sbf.insert(4,"-"); // 插入System.out.println(sbf );//java-666
- 其他方法
声明 | 方法描述 |
---|---|
int capacity() | 返回当前容量。 |
char charAt(int index) | 返回此序列中指定索引处的 char 值。 |
int codePointAt(int index) | 返回指定索引处的字符(统一代码点)。 |
int codePointBefore(int index) | 返回指定索引前的字符(统一代码点)。 |
int codePointCount(int beginIndex, int endIndex) | 返回此序列指定文本范围内的统一代码点。 |
StringBuffer delete(int start, int end) | 移除此序列的子字符串中的字符。 |
StringBuffer deleteCharAt(int index) | 移除此序列指定位置的 char。 |
void ensureCapacity(int minimumCapacity) | 确保容量至少等于指定的最小值。 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此序列复制到目标字符数组 dst。 |
int indexOf(String str) | 返回第一次出现的指定子字符串在该字符串中的索引。 |
int indexOf(String str, int fromIndex) | 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
int lastIndexOf(String str) | 返回最右边出现的指定子字符串在此字符串中的索引。 |
int lastIndexOf(String str, int fromIndex) | 返回最后一次出现的指定子字符串在此字符串中的索引。 |
int length() | 返回长度(字符数)。 |
int offsetByCodePoints(int index, int codePointOffset) | 返回此序列中的一个索引,该索引是从给定 index 偏移 codePointOffset 个代码点后得到的。 |
StringBuffer replace(int start, int end, String str) | 使用给定 String 中的字符替换此序列的子字符串中的字符。 |
StringBuffer reverse() | 将此字符序列用其反转形式取代。 |
void setCharAt(int index, char ch) | 将给定索引处的字符设置为 ch。 |
void setLength(int newLength) | 设置字符序列的长度。 |
CharSequence subSequence(int start, int end) | 返回一个新的字符序列,该字符序列是此序列的子序列。 |
String substring(int start) | 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。 |
String substring(int start, int end) | 返回一个新的 String,它包含此序列当前所包含的字符子序列。 |
String toString() | 返回此序列中数据的字符串表示形式。(默认) |
void trimToSize() | 尝试减少用于字符序列的存储空间。 |
三、StringBuilder
2.1 StringBuffer介绍
-
StringBuilder和StringBuffer,String一样代表字符串
-
也是可变字符序列,API与StringBuffer完全一致,就是为了替换StringBuffer
-
StringBuilder是不保证线程安全,相对StringBuffer在改变字符串时效率较快
-
如果不考虑线程安全,改变字符建议Builder,如果要求线程安全使用Buffer
StringBuilder 与 StringBuffer 方法完全一致,这里就不在列出了,讲述了,下面总结一下这String,StringBuffer ,StringBuilder 这三个的区别
四、String,StringBuffer ,StringBuilder 区别
- String 不可变,拼接字符串效率最低
- StringBuffer 、StringBuilder 均可变
- StringBuffer 适合多线程,可保证线程安全,但是拼接字符串效率较低。
- StringBuilder适合单线程,不保证线程安全,拼接字符串效率较高。
最后
编写不易,如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍