本文共 2791 字,大约阅读时间需要 9 分钟。
String类是所有项目开发中一定会用到的一个功能类,并且这个类拥有如下的特点:
虽然String类很好使用,但是如果认真去思考也会发现其最大的弊端:内容不允许修改,虽然大部分情况下我们都不会涉及到字符串内容的频繁修改,但是依然会存在这样的情况,多以为了解决此问题,专门提供了一个StirngBuffer类实现字符串内容的修改处理。
**范例:**观察String与StringBuffer的对比 Stirng类对象的引用传递:public class JavaApi { public static void main(String[] args) { String str = "Hello "; change(str); System.out.println(str); //内容没有发生改变 } public static void change(String temp){ temp += "world"; }}
StirngBuffer并不像Stirng类那样有两种对象实例化,StringBuffer必须像普通类那样首先进行对象实例化,而后在才可以调用方法进行处理,而这个时候可以调用StringBuffer类中的如下方法:
StringBuffer类引用传递:
public class JavaApi { public static void main(String[] args) { StringBuffer btf = new StringBuffer("Hello "); change(btf); System.out.println(btf); //内容没有发生改变 } public static void change(StringBuffer temp){ temp.append("world !"); }}
大多数情况下,很少会出现有字符串内容的改变,这种改变指的并不是针对于静态常量池的改变:
**范例:**分析一下已有问题public static void main(Stirng[] args){ Stirng strA = "www.baidu.com"; String strB = "www." + "mldn" +".com"; System.out.println(strA == strB); }
这个时候的strB对象内容的改变不算改变,从更加严格的意义上来讲,对于现在的strB当程序编译之后会变为如下形式:
String strB = "www." + "mldn" +".com";
StringBuffer buf = new StringBuffer();buf.append("www.").append("mldn").append(".com);
所有的“+”在编译之后都变为了StirngBuffer中的append()方法,并且在程序中StirngBuffer与String类对象之间可以互相转换:
public static void main(String[] args) { StringBuffer btf = new StringBuffer(); btf.append(".com").insert(0,"www.").insert(4,"baidu"); System.out.println(btf); //内容没有发生改变 }
2、删除指定范围的数据: public StringBuffer delete(int start,int end);
public static void main(String[] args) { StringBuffer btf = new StringBuffer(); btf.append("hello world").delete(6,12).insert(6,"baidu"); System.out.println(btf); //内容没有发生改变 }
3、字符串内容的反转
public static void main(String[] args) { StringBuffer btf = new StringBuffer(); btf.append("hello world"); System.out.println(btf.reverse()); //内容没有发生改变 }
实际上与StringBuffer类还有一个类似的功能类:StringBuilder类,这个类是JDK1.5的时候提供的,该类中提供的方法,与StringBuffer的功能相同,最大的区别在于StringBuffer类中的方法属于线程安全的,全部方法使用synchronized关键字标注,而StringBuilder类属于非线程安全的。
**面试题:请解释String、StringBuffer、StringBuilder的区别?
转载地址:http://knfoi.baihongyu.com/