StringBuffer类
String类是在所有开发项目开发之中一定会使用的一个功能类,并且这个类拥有如下功能
虽然String类很好用,但是我们发现它也有弊端,就是内容不允许频繁修改,所以为了解决问题,我们提供了StringBuffer类
StringBuffer 并不像String类那样拥有两种实例化方法,必须要想普通方法一样调用方法,这个时候可以考虑一下方法
范例:观察String与StringBuffer对比
String类对象引用传递
public class JavaAPIDemo { public static void main(String[] args) { // TODO Auto-generated method stub String str ="hello"; change(str); System.out.println(str); } public static void change(String temp) { temp+="word"; } }
str内的值没有发生改变
StringBuffer类对象引用传递
public class JavaAPIDemo { public static void main(String[] args) { // TODO Auto-generated method stub StringBuffer buf =new StringBuffer("Hello "); change(buf); System.out.println(buf); } public static void change(StringBuffer temp) { temp.append("World"); } }
buf内的值发生了改变
由此可见String内的值不能改变,StringBuffer内的值可以改变,这就是两这最主要的区别
实际上大部分的情况下,很少会出现有字符串内容的改变,这种改变指的并不是针对静态常量池的改变;
范例:分析一下已有问题
public class JavaAPIDemo { public static void main(String[] args) { String strA="www.baidu.com"; String strB="www."+"baidu."+"com"; System.out.println(strA==strB); } }
在这个时候strB对象里面的内容并不是真正改变,或者更严格的将,对于现在的strB当程序编译的时候就相当于下面形式
buf.append(“www.”).append(“baidu.”).append(“com”);
也就是说所有的”+“在我们编译后都变为了StringBuffer中的append()方法,并且在程序中String类对象和StringBuffer类对象本来就可以互相转换
在StringBuffer类里面除了可以支持字符串内容修改之外,实际上也添加了很多String所不具有的方法
public class JavaAPIDemo { public static void main(String[] args) { StringBuffer buf=new StringBuffer(); buf.append(".com").insert(0,"www.").insert(4, "baidu"); System.out.println(buf); } }
删除指定范围的数据:public StringBuffer delete(int start,int end);
public class JavaAPIDemo { public static void main(String[] args) { StringBuffer buf=new StringBuffer(); buf.append("Hello World!").delete(6, 12); System.out.println(buf); } }
-字符串内容反转:public StringBuffer reverse();
public class JavaAPIDemo { public static void main(String[] args) { StringBuffer buf=new StringBuffer(); buf.append("Hello World!"); System.out.println(buf.reverse()); } }
实际上与StringBuffer类还有一个类似的功能类:StringBuilder类,这个类是在JDK1.5之后提供的,该类中提供的方法与StringBuffer类相同,区别在于StringBuffer类中的方法属于线程安全的,全都使用了synchronized关键字进行标注,而StringBuilder类属于非线程安全的
面试题:请解释String、StringBuffer、StringBuilder的主要区别?
String类是字符串的首选类型,其最大的特点是内容不允许修改;
StringBuffer与StringBuilder类的内容允许修改;
StringBuffer是在JDK1.0的时候提供的,属于线程安全操作,而StringBuilder是在JDK1.5的时候提供的不是线程安全操作