StringBuffer的特点: 1、线程安全的 不安全,就是存在同步 *** 作同一数据的行为,效率高。 安全的时候,没有同步 *** 作,效率低。 在实际开发中,效率和安全着两个问题一直都是很难平衡的问题。 生活中的例子: 线程安全的例子:银行的一些业务,电影院卖票,医院取号。 线程不安全的例子:视频会员,博客评论 2、线程安全的,StringBuffer是一个可变序列 3、StringBuffer又称之为字符串缓冲区,就把它当作一个字符串去 *** 作,只不过它与String相比是可以修改内容的 4、在任何时间点,它包含着一些特定的字符序列,但是可以通过某些方法修改这字符序列的长度和内容 简单记忆:StringBuffer是一个线程安全的可变序列。 面试题:StringBuffer与String区别: 1、StringBuffer的长度和内容都可以发生改变,String却不行 2、String每创建一个新的字符串都会开辟一个新的常量池区域 StringBuffer会提前给出容量,可以进行字符串的拼接,而不会重新弄开辟空间 StringBuffer的构造方法: public StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。 public StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。 public StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。
public class StringBufferDemo1 { public static void main(String[] args) { //public StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。 StringBuffer sb1 = new StringBuffer(); System.out.println("sb1:" + sb1); //StringBuffer重写了toString方法 //如何获取StringBuffer的容量 //public int capacity()返回当前容量。 System.out.println("当前StringBuffer的容量为:" + sb1.capacity()); //public int length()返回长度(字符数)。 System.out.println("StringBuffer中字符串的长度为:" + sb1.length()); System.out.println("==================================================="); //public StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。 StringBuffer sb2 = new StringBuffer(50); System.out.println("sb2:" + sb2); //StringBuffer重写了toString方法 //如何获取StringBuffer的容量 //public int capacity()返回当前容量。 System.out.println("当前StringBuffer的容量为:" + sb2.capacity()); //public int length()返回长度(字符数)。 System.out.println("StringBuffer中字符串的长度为:" + sb2.length()); System.out.println("==================================================="); //public StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。 StringBuffer sb3 = new StringBuffer("hello"); System.out.println("sb3:" + sb3); //StringBuffer重写了toString方法 //如何获取StringBuffer的容量 //public int capacity()返回当前容量。 System.out.println("当前StringBuffer的容量为:" + sb3.capacity()); // 21 = 16(初始值) + 5 //public int length()返回长度(字符数)。 System.out.println("StringBuffer中字符串的长度为:" + sb3.length()); // 5 } }
StringBuffer的添加功能 public StringBuffer append(String str) 通过观察API发现,不光可以追加字符串,还可以是任意数据类型的追加到StringBuffer中 返回的StingBuffer是什么呢? public StringBuffer insert(int index,String str)下面是相应的例子:
public class StringBufferDemo2 { public static void main(String[] args) { //创建一个StringBuffer对象 StringBuffer sb = new StringBuffer(); //public StringBuffer append(String str) StringBuffer stringBuffer = sb.append("hello"); System.out.println(stringBuffer); System.out.println(sb); System.out.println(sb == stringBuffer); // sb.append(10); // sb.append('a'); // sb.append(true); // sb.append(12.34); // //无论追加的数据是什么类型, // 一旦进入到StringBuffer中就是成了字符串 // System.out.println(sb); // System.out.println(stringBuffer); //链式编程追加 sb.append(10).append('a').append(true).append(12.34); System.out.println(sb); System.out.println("==============================================="); //hello10atrue12.34 //public StringBuffer insert(int offset,String str) // 将字符串插入到此字符序列中。返回的是字符串缓冲区本身 //String参数的String按顺序插入到指定偏移量的该序列中,向上移动原始位于该位置的任何字符, // 并将该序列的长度增加到参数的长度。 sb.insert(5, "hadoop"); System.out.println(sb);//hellohadoop10atrue12.34 // 如果str是null ,则四个字符"null"被插入到该序列中。 // sb.insert(5,null); Object o = null; sb.insert(5, o); System.out.println(sb);//hellonull10atrue12.34 } }
remove,move,delete,drop,truncate StringBuffer的删除功能 public StringBuffer deleteCharAt(int index) 删除指定索引处的字符。该序列缩短了一个char public StringBuffer delete(int start,ipublic class StringBufferDemo3 { public static void main(String[] args) { //使用带参数的构造方法创建StringBuffer对象 StringBuffer sb = new StringBuffer("bigdata"); System.out.println("未做删除 *** 作之前的StringBuffer:" + sb); // StringBuffer sb2 = sb.deleteCharAt(3); // // *** 作的是同一个StringBuffer对象 // System.out.println(sb);----bigata // System.out.println(sb2);---bigata // System.out.println(sb==sb2);----true sb.deleteCharAt(3); System.out.println("做删除 *** 作之后的StringBuffer:" + sb); //如果 index为负数或大于或等于length() 。 //index的值最大可以取到实际存储字符串的长度-1 // sb.deleteCharAt(30); // sb.deleteCharAt(6); System.out.println("==============================================="); //public StringBuffer delete(int start,int end) //删除此序列的子字符串中的字符。 // 子串开始于指定start并延伸到字符索引end - 1 ,或如果没有这样的字符存在的序列的结束。 // 如果start等于end ,则不作任何更改。 // start<=index nt end)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)