隨筆 - 6  文章 - 0  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(2)

          隨筆分類

          文章分類

          好友

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           這是好友面試的一道題,其實我知道使用的區別,StringBuffer必須new出來,StringBuffer的append的效率比string的+=的效率高,
          其實發現還有很大的區別,看了看以前scjp的考題
          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
          這是Java參數傳遞(by value)造成的,是不可變的(immutable).,例如 基本類型,String傳值,復制了值傳遞過去;可變的(Object)傳值,復制了引用傳遞過去。

          而題目中第七行text = text.append (“C”),append方法會改變text中的值
          而這個text與main中的textBuffer是指向同一個對象,所以對應的輸出是javac。
          string的值永遠不會改變!


          String a = "a";//假設a指向地址0x0001,
          a = "b";//重新負值后a指向地址0x0002,但0x0001地址中保存的"a"依舊存在,但已經不再是a所指向的。
          從表面上看String類型的對象改變了值,但事實是他不能改變值,只能改變指向的地址


          StringBuffer則不同,直接改變指向的地址中保留的值
          還有
          StringBuffer s1 = new StringBuffer("a");
          StringBuffer s2 = new StringBuffer("a");
          s1.equals(s2)//為什么是false

          String s1 = new String("a");
          String s2 = new String("a");
          s1.equals(s2)//為什么是true
          StringBuffer類中沒有重新定義equals這個方法,因此這個方法就來自Object類,
          而Object類中的equals方法是用來比較地址的,所以等于false.

          String類中重新定義了equals這個方法,而且比較的是值,而不是地址。所以會是
          true。
          對于這樣能不能面試出真正的水平,感到懷疑。

          posted on 2006-03-02 13:54 badboy 閱讀(804) 評論(0)  編輯  收藏 所屬分類: Java基礎
          主站蜘蛛池模板: 苏尼特左旗| 原平市| 高陵县| 个旧市| 兖州市| 濉溪县| 镇原县| 右玉县| 灵璧县| 陇川县| 固原市| 博野县| 睢宁县| 呼图壁县| 柏乡县| 历史| 油尖旺区| 正宁县| 皋兰县| 兴国县| 富裕县| 贡觉县| 嵊泗县| 临漳县| 岳阳县| 杭州市| 滦平县| 云龙县| 崇仁县| 天津市| 广安市| 阿拉善右旗| 南川市| 大兴区| 梅河口市| 肥城市| 明溪县| 铅山县| 分宜县| 临邑县| 内江市|