StringBuffer:线程程安全的可变字符序列
线程(后面多线程中讲)
线程的安全问题,是难点(多线程属于难点) 多线程------>解决了多线程安全问题------>是死锁 :生产消费模式(Java中等待唤醒机制)
线程安全:同步的---->执行效率低
举例:银行的网站,医疗平台...
线程不安全:不同步---->执行效率高
举例:新闻网站,XXX论坛...
面试题:(重点)
StringBuffer和String的区别:
前者是一个可变的字符序列,后者是不可变的字符序列
如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存
而StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
举例:
public int length()返回长度
public int capacity()返回当前容量 (如果超过容量,系统自动分配(存储字符串的时候,英文的))
举例:
public StringBuffer append(String/boolean....) :在字符串缓冲区中追加数据(在末尾追加),并且返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):将当前str字符串添加到指定位置处,它返回字符串缓冲区本身
举例:
StringBuffer的删除功能:
public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
tringBuffer的反转功能:
public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
tringBuffer的截取功能:
public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串
举例:
StringBuffer的替换功能:
public StringBuffer replace(int start,int end,String str)
从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身
StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区.(两者都看做容器)
StringBuffer:线程安全的,同步的,执行效率低
StringBuilder:线程不安全的,不同步的,执行效率高,并且单线程中优先采用StringBuilder
StringBuffer 执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区
2 StringBuffer和数组的区别:
数组: 它是可以存储多个数据的容器,并且多个数据的类型必须一致
数组长度功能:length属性
StringBuffer: 它是容器,它在缓冲区始终存储的只能字符串类型的数据
获取缓冲区的长度:length()
线程(后面多线程中讲)
线程的安全问题,是难点(多线程属于难点) 多线程------>解决了多线程安全问题------>是死锁 :生产消费模式(Java中等待唤醒机制)
线程安全:同步的---->执行效率低
举例:银行的网站,医疗平台...
线程不安全:不同步---->执行效率高
举例:新闻网站,XXX论坛...
面试题:(重点)
StringBuffer和String的区别:
前者是一个可变的字符序列,后者是不可变的字符序列
如果从内存角度考虑,String定义的时候,会在常量池中开辟空间,比较耗费内存
而StringBuffer,字符串缓冲区(里面存储的全部都是字符串),它会释放掉
StringBuffer的构造方法:
StringBuffer() :无参构造的形式,初始容量16
StringBuffer(int capacity) :指定容量构造一个字符串缓冲区StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
举例:
StringBuffer sb3 = new StringBuffer("hello");
System.out.println("sb3:"+sb3);
System.out.println("length():"+sb3.length());
System.out.println("capacity():"+sb3.capacity());//初始容量+当前字符数
StringBuffer的获取功能:
public int length()返回长度
public int capacity()返回当前容量 (如果超过容量,系统自动分配(存储字符串的时候,英文的))
举例:
StringBuffer sb3=new StringBuffer("weffaa");
System.out.println(sb3.length());
StringBuffer的添加功能:(实际开发中用的多)
public StringBuffer append(String/boolean....) :在字符串缓冲区中追加数据(在末尾追加),并且返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):将当前str字符串添加到指定位置处,它返回字符串缓冲区本身
举例:
StringBuffer sb=new StringBuffer("l love");
StringBuffer sb2=new StringBuffer("java");
System.out.println(sb.append(sb2));
StringBuffer sb3=new StringBuffer("helloworld");
StringBuffer sb4=new StringBuffer("java");
System.out.println(sb3.insert(5, sb4));
StringBuffer的删除功能:
public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
举例:
/**public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
* @author 田伟
*
*/
public class Demo2 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("helloworld");
System.out.println(sb.deleteCharAt(5));
StringBuffer sb2=new StringBuffer("helloworld");
System.out.println(sb2.delete(2, 4));
}
}
tringBuffer的反转功能:
public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
举例:
StringBuffer sb3=new StringBuffer("helloworld");
System.out.println(sb3.reverse());
tringBuffer的截取功能:
public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串
举例:
/**public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
public String substring(int start,int end) :
从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串
* @author 田伟
*
*/
public class Demo3 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("shishuoxinyu");
System.out.println(sb.substring(3));
StringBuffer sb2=new StringBuffer("shishuoxinyu");
System.out.println(sb2.substring(3,7));
}
}
注释:两种截取都是取的是截取的部分,而且遵循包前不包后。
StringBuffer的替换功能:
public StringBuffer replace(int start,int end,String str)
从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身
/**public StringBuffer replace(int start,int end,String str)
从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身
* @author 田伟
*
*/
public class Demo4 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer("shishuoxinyu");
System.out.println(sb.replace(3, 7, "说"));
}
}
String和StringBuffer之间的相互转换:
public class StringBufferTest {
public static void main(String[] args) {
//String---StringBuffer
//定义了一个
String s = "hello";
// StringBuffer sb = s ;不行
// StringBuffer sb = "hello";
// 方式1 :带参构造,StringBuffer(String str)
StringBuffer sb = new StringBuffer(s) ;//非常重要
//方式2:可以通过无参构造创建字符串缓冲区对象,给缓冲区中追加内容
StringBuffer sb2 = new StringBuffer() ;
sb2.append(s) ;
System.out.println("sb:"+sb);
System.out.println("sb2:"+sb2);
System.out.println("----------------------------");
//StringBuffer---String
StringBuffer buffer = new StringBuffer("world") ;
//方式1:public String(StringBuffer buffer)分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列
String str = new String(buffer) ;
//方式2:StringBuffer的功能:public String toString()返回此序列中数据的字符串表示形式
String str2 = buffer.toString() ;
System.out.println("str:"+str);
System.out.println("str2:"+str2);
}
}
1 StringBuffer,String,StringBuilder的区别:
StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区.(两者都看做容器)
StringBuffer:线程安全的,同步的,执行效率低
StringBuilder:线程不安全的,不同步的,执行效率高,并且单线程中优先采用StringBuilder
StringBuffer 执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区
2 StringBuffer和数组的区别:
数组: 它是可以存储多个数据的容器,并且多个数据的类型必须一致
数组长度功能:length属性
StringBuffer: 它是容器,它在缓冲区始终存储的只能字符串类型的数据
获取缓冲区的长度:length()