Java StringBuffer类
样子的木偶 人气:0StringBuffer类
String类是在所有开发项目开发之中一定会使用的一个功能类,并且这个类拥有如下功能
- 每个字符串的常量都属于一个String类匿名对象,并且不能修改;
- String类有两个常量池:静态常量池、运行常量池;
- String类对象实例化建议直接使用赋值的形式完成,这样可以直接将对象保存在对象池中方便下次重用;
虽然String类很好用,但是我们发现它也有弊端,就是内容不允许频繁修改,所以为了解决问题,我们提供了StringBuffer类
StringBuffer 并不像String类那样拥有两种实例化方法,必须要想普通方法一样调用方法,这个时候可以考虑一下方法
- 构造方法:public StringBuffer();
- 数据追加:public StringBuffer append(数据类型、变量),相当于字符串中的“+”操作;
- 构造方法:public StringBuffer(String str),相当于初始化
范例:观察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类对象本来就可以互相转换
- String类对象变为StringBuferr可以依靠StringBuffer类构造方法或者使用append()方法
- 所以类的对象都可以通过toString()方法将其变为String类型
在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的时候提供的不是线程安全操作
加载全部内容