數據加載中……
          string和StringBuffer的區別

          如果你在網上一搜,會有非常多的答案,其中最多的就是String是不可變而StringBuffer是可變的,但是這可變與不可變究竟是什么意思呢?如果你能用IDE進行debug的話,你就會發現,String實例化以后所有的屬性都是final的,而StringBuffer確不是,這就是可變與不可變。下面引用SCJP的試題來解釋一下這個例子:

          java 代碼
          1. public class Test {   
          2.    public static void stringReplace (String text) {   
          3.     text = text.replace('j' , 'i');   
          4.     }   
          5.       
          6.    public static void bufferReplace (StringBuffer text) {   
          7.     text = text.append("C");   
          8.     }   
          9.       
          10.     public static void main (String args[]) {   
          11.      String textString = new String ("java");   
          12.      StringBuffer textBuffer = new StringBuffer ("java");   
          13.        
          14.      stringReplace (textString);   
          15.      bufferReplace (textBuffer);   
          16.        
          17.      System.out.println (textString + textBuffer);   
          18.      }   
          19.      }   

          答案是 javajavaC

          這是因為第七行text = text.append ("C"),append方法會改變text中的值,而text與textBuffer指向的地址是相同的。因此會打印javaC

          再舉個例子:

          String a = "a"; //假設a指向地址0x0001

          a = "b";//重新賦值后a指向地址0x0002,但0x0001地址中保存的"a"依舊存在,但已經不再是a所指向的。

          因此String的操作都是改變賦值地址而不是改變值操作

          posted on 2010-08-05 16:32 Bill_Xie 閱讀(124) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 循化| 寻乌县| 托克逊县| 巴彦淖尔市| 双江| 荣昌县| 长丰县| 西城区| 灵丘县| 深水埗区| 遂宁市| 临城县| 龙川县| 深州市| 襄城县| 汕尾市| 中西区| 斗六市| 财经| 出国| 弥渡县| 普定县| 增城市| 尼玛县| 大名县| 惠水县| 博罗县| 灯塔市| 天津市| 凯里市| 南昌市| 北宁市| 子长县| 德江县| 克什克腾旗| 阿巴嘎旗| 石门县| 体育| 句容市| 襄樊市| 泸州市|