數據加載中……
          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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 巴里| 大埔区| 厦门市| 南投县| 柳河县| 临沂市| 固安县| 谷城县| 松桃| 天长市| 云和县| 来凤县| 黔江区| 曲沃县| 灵璧县| 松阳县| 辽中县| 竹溪县| 始兴县| 鹿邑县| 琼海市| 柯坪县| 丹寨县| 秭归县| 昌图县| 白河县| 巢湖市| 佛教| 防城港市| 承德市| 杭锦旗| 安阳县| 莱阳市| 盐津县| 余姚市| 汕尾市| 遂宁市| 江华| 江陵县| 获嘉县| 达州市|