A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦回唐朝 中级黑马   /  2013-8-24 00:01  /  944 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

几天前一个同学突然问我String和StringBuffer有什么区别,当时顿时有点懵,没反应过来,回来后特意整理了一下两者间的区别!
String实例化以后所有的属性都是final的,而StringBuffer确不是,这就是可变与不可变。下面引用SCJP的试题来解释一下这个例子:
java 代码
public class Test {   
   public static void stringReplace (String text) {   
   text = text.replace('j' , 'i');   
   }   
      
   public static void bufferReplace (StringBuffer text) {   
   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);   
    }   
    }   
答案是 javajavaC
这是因为第七行text = text.append ("C"),append方法会改变text中的值,而text与textBuffer指向的地址是相同的。因此会打印javaC
再举个例子:
String a = "a";  //假设a指向地址0x0001
a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。
因此String的操作都是改变赋值地址而不是改变值操作

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马