數據加載中……

          2010年8月5日

          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 @ 2010-08-05 16:32 Bill_Xie 閱讀(124) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 枣庄市| 施甸县| 深州市| 邹平县| 调兵山市| 黄骅市| 大埔区| 鲁山县| 平利县| 洮南市| 永善县| 阜新| 基隆市| 饶阳县| 莲花县| 兴山县| 东阿县| 南京市| 宣武区| 永登县| 贺州市| 云霄县| 辉南县| 石景山区| 富民县| 青川县| 灵璧县| 玛多县| 潮安县| 根河市| 仁寿县| 财经| 抚远县| 垫江县| 遵化市| 启东市| 星子县| 江永县| 金川县| 福贡县| 楚雄市|