读书人

精辟的String与StringBuffer(StringBu

发布时间: 2012-10-30 16:13:35 作者: rapoo

精辟的String与StringBuffer(StringBuilder)的区别

今天有空,下了scjp的题目做做,想起了一个本来想写却又没写的问题。这个问题几乎已成为面试必问题,虽然答案很简单,但回答出确又真正理解的人我觉得并不多。

String与StringBuffer的区别?

如果你在网上一搜,会有非常多的答案,其中最多的就是String是不可变而StringBuffer是可变的,但是这可变与不可变究竟是什么意思呢?如果你能用IDE进行debug的话,你就会发现,String实例化以后所有的属性都是final的,而StringBuffer确不是,这就是可变与不可变。下面引用SCJP的试题来解释一下这个例子:

    public class Test { public static void stringReplace(String text) { //把textString的地址copy给text,text也指向了textString的"java" //text.replace('j', 'i');的结果是"iava" //text = text.replace('j', 'i');就是重新使text指向"iava" //由于该方法的返回类型是void,所以原来的textString没变 text = text.replace('j', 'i'); } public static void bufferReplace(StringBuffer text) { //textBuffer的地址copy给text //然后沿着text指向的字符串(其实也就是textBuffer指向的对象)操作,添加一个"C" //虽然没有任何返回,但是这个操作影响到了textBuffer所指向的字符串 //所以上个方法打印"java",这个方法打印"javaC" text = text.append("C"); } public static void main(String args[]) { String textString = new String("java"); StringBuffer textBuffer = new StringBuffer("java"); stringReplace(textString); bufferReplace(textBuffer); System.out.println(textString + textBuffer); }}

读书人网 >其他相关

热点推荐