JavaSE|StringBuffer 古城微笑少年丶 2022-05-07 08:10 94阅读 0赞 ### JavaSE|StringBuffer ### * 构造方法 * 添加功能 * 删除功能 * 替换功能 * 反转功能 * 截取功能 * StringBuffer 和 String 的相互转换 * * String 转 StringBuffer * StringBuffer 转 String * StringBuilder和StringBuffer * 面试题 StringBuffer是线程安全的可变字符串。 **StringBuffer和String的区别:** StringBuffer长度和内容可变,String不可变。 如果使用StringBuffer做字符串拼接,不会浪费太多的资源。 -------------------- # 构造方法 # **1. public StringBuffer()** 最常用 无参构造方法。其初始容量为 16 个字符。 super(16); **2. public StringBuffer(int capacity)** 指定容量的字符串缓冲区对象。 super(capacity); **3. public StringBuffer(String str)** 指定字符串内容的字符串缓冲区对象。 super(str.length() + 16); -------------------- # 添加功能 # **1. public StringBuffer append(String str)** 可以把任意类型数据添加到字符串缓冲区,并返回字符串缓冲区本身。 StringBuffer sb = new StringBuffer(); // public StringBuffer append(String str) StringBuffer sb2 = sb.append("hello"); System.out.println("sb:" + sb); //hello System.out.println("sb2:" + sb2); //hello System.out.println(sb == sb2); // true(说明没有重新开空间) StringBuffer sb = new StringBuffer(); //可以添加任意类型的数据 // 链式编程 sb.append("hello").append(true).append(12).append(34.56); System.out.println("sb:" + sb); //hellotrue1234.56 sb.insert(5, "world"); System.out.println("sb:" + sb); //helloworldtrue1234.56 **2. public StringBuffer insert(int offset,String str)** 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 -------------------- # 删除功能 # **1. public StringBuffer deleteCharAt(int index)** 删除指定位置的字符,并返回本身 StringBuffer sb = new StringBuffer(); // 添加功能 sb.append("hello").append("world").append("java"); System.out.println("sb:" + sb); sb.deleteCharAt(1); // hlloworldjava // 删除第一个l这个字符 sb.deleteCharAt(1); //hloworldjava **2. public StringBuffer delete(int start,int end)** 删除指定位置开始指定位置结束(包左不包右)的内容,并返回本身 StringBuffer sb = new StringBuffer(); // 添加功能 sb.append("hello").append("world").append("java"); System.out.println("sb:" + sb); // 删除world这个字符串 // sb.delete(5, 10); // 删除所有的数据 sb.delete(0, sb.length()); -------------------- # 替换功能 # **1. public StringBuffer replace(int start,int end,String str)** StringBuffer sb = new StringBuffer(); sb.append("hello"); sb.append("world"); sb.append("java"); System.out.println("sb:" + sb); //helloworldjava // 把world这个数据替换为"节日快乐" sb.replace(5, 10, "节日快乐"); System.out.println("sb:" + sb); //hello节日快乐java -------------------- # 反转功能 # **1. public StringBuffer reverse()** 将此字符序列用其反转形式**取代** StringBuffer sb = new StringBuffer(); sb.append("霞青林爱我"); System.out.println("sb:" + sb); //霞青林爱我 sb.reverse(); System.out.println("sb:" + sb); //我爱林青霞 } # 截取功能 # **1. public String substring(int start)** **2. public String substring(int start,int end)** 注意截取功能的返回值类型不再是StringBuffer本身。 StringBuffer sb = new StringBuffer(); sb.append("hello").append("world").append("java"); System.out.println("sb:" + sb); // 截取功能 // public String substring(int start) String s = sb.substring(5); System.out.println("s:" + s); //worldjava System.out.println("sb:" + sb); //helloworldjava // public String substring(int start,int end) String ss = sb.substring(5, 10); System.out.println("ss:" + ss); //world System.out.println("sb:" + sb); //helloworldjava # StringBuffer 和 String 的相互转换 # ## String 转 StringBuffer ## **1. public StringBuffer(String str)** 建议 **2. public StringBuffer append(String str)** String s = "hello"; StringBuffer sb = new StringBuffer(s); StringBuffer sb1 = new StringBuffer(); sb.append(s); ## StringBuffer 转 String ## **1. public String(StringBuffer buffer)** **2. public String toString()** 建议 StringBuffer buffer = new StringBuffer("java"); String str = new String(buffer); String str1 = buffer.toString(); # StringBuilder和StringBuffer # StringBuilder是一个可变的字符序列。提供一个与 StringBuffer 兼容的 API,但不保证同步。被设计用作 StringBuffer 的一个简易替换,用在**字符串缓冲区被单个线程使用的时候**(这种情况很普遍)。如果可能,建议**优先**采用该类,因为在大多数实现中,**它比 StringBuffer 要快**。 # 面试题 # **1.String, StringBuffer, StringBuilder的区别?** A:String是内容不可变的,而StringBuffer和StringBuilder都是内容可变的。 B:StringBuffer是同步的,数据安全(多线程情况下),效率低;StringBuilder是不同步的,数据不安全(多线程情况下),效率高。 **2.StringBuffer和数组的区别?** 二者都可以看做容易,装其他数据。 但是StringBuffer的数据最终是一个字符串数据;而数组可以放置多种数据,但必须是同一数据类型的。 \*\*3.\*\*String和StringBuffer作为参数传递 public class StringBufferDemo { public static void main(String[] args) { String s1 = "hello"; String s2 = "world"; System.out.println(s1 + "---" + s2);// hello---world change(s1, s2); System.out.println(s1 + "---" + s2);// hello---world StringBuffer sb1 = new StringBuffer("hello"); StringBuffer sb2 = new StringBuffer("world"); System.out.println(sb1 + "---" + sb2);// hello---world change(sb1, sb2); System.out.println(sb1 + "---" + sb2);// hello---worldworld } public static void change(StringBuffer sb1, StringBuffer sb2) { sb1 = sb2; sb2.append(sb1); } public static void change(String s1, String s2) { s1 = s2; s2 = s1 + s2; } } 1. 对基本类型,形式参数的改变不影响实际参数。 2. 对引用类型,形式参数的改变直接影响实际参数。 3. **String作为参数传递,效果和基本类型作为参数传递是一样的。** 4. StringBuffer作为参数传递,赋值操作不影响实际参数的值,但append()方法会影响。对StringBuffer不要随便用赋值操作。
还没有评论,来说两句吧...