1.区别:
1.首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因:
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
2. 再来说线程安全在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
3. 总结一下 String:适用于少量的字符串操作的情况StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
摘抄自摘抄来源
***String类:***一旦创建就不再修改
。如果要进行大量字符串的修改,复制,连接,删除,
一般使用(StringBuilder和StringBuffer比较多)
C++同理。
StringBuffer类和StringBuilder:
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
参考的链接
2.String类的方法:
3.StringBuffer的方法:
StringBuffer str=new StringBuffer();
方法 | 作用 | 具体的使用 | 举个栗子 |
---|---|---|---|
public StringBuffer append(String s) | 将指定的字符串追加到此字符序列。 | str.append(“abc”); str.append(" ").append(“456”); | str=“abc” str=“abc 456” |
public StringBuffer reverse() | 将此字符序列用其反转形式取代 | {如:str=“12345”}str.reverse(); | str=“54321” |
public delete(int start, int end) | 移除此序列的子字符串中的字符。 | {如:str=“12345”}str.delete(2,4); | str=“125”(删除为左闭右开) |
public insert(int offset, string i) | 将 参数i的字符串表示形式插入此序列中。 | {str=“weare”}str.(2," “);str.insert(5,” good!"); | str=“we are” str=“we are good!” |
replace(int start, int end, String str) | 使用给定 String 中的字符替换此序列的子字符串中的字符。 | {str=“amazing!”}str.place(4,7,“zd”) | str=“amzed!”{左闭右开} |
这些方法与String类的方法类似
序号 | 方法 | 解释 |
---|---|---|
1 | int capacity() | 返回当前容量。 |
2 | char charAt(int index) | 返回此序列中指定索引处的 char 值。 |
3 | void ensureCapacity(int minimumCapacity) | 确保容量至少等于指定的最小值。 |
4 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将字符从此序列复制到目标字符数组 dst。 |
5 | int indexOf(String str) | 返回第一次出现的指定子字符串在该字符串中的索引。 |
6 | int indexOf(String str, int fromIndex) | 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的引。 |
7 | int lastIndexOf(String str) | 返回最右边出现的指定子字符串在此字符串中的索引。 |
8 | int lastIndexOf(String str, int fromIndex) | 返回 String 对象中子字符串最后出现的位置。 |
9 | int length() | 返回长度(字符数)。 |
10 | void setCharAt(int index, char ch) | 将给定索引处的字符设置为 ch。 |
11 | void setLength(int newLength) | 设置字符序列的长度。 |
12 | CharSequence subSequence(int start, int end) | 返回一个新的字符序列,该字符序列是此序列的子序列。 |
13 | String substring(int start) | 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。 |
14 | String substring(int start, int end) | 返回一个新的 String,它包含此序列当前所包含的字符子序列。 |
15 | String toString() | 返回此序列中数据的字符串表示形式。 |
4.StringBuilder的方法:
与StringBuffer差不多。
总结:字符操作属于比较重要,也容易搞混的操作。对于要学习算法的同学,无论是C++版还是Java版,熟练的掌握它们的方法,都有益于后续的发展。