如何學好java

          如何學好java,其實很簡單,只要用心體會,慢慢積累!
          posts - 106, comments - 7, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          StringBuffer與String的區別

          Posted on 2011-05-03 16:02 哈希 閱讀(204) 評論(0)  編輯  收藏 所屬分類: java 代碼

          string和stringbuffer區別
          這是好友面試的一道題,其實我知道使用的區別,StringBuffer必須new出來,StringBuffer的append的效率比string的+=的效率高,
          其實發現還有很大的區別,看了看以前scjp的考題

          Test


          答案是 javajavaC
          這是Java參數傳遞(by value)造成的
          而題目中第七行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則不同,直接改變指向的地址中保留的值
          還有

          public static void main(String[] args) {
                  StringBuffer s1 
          = new StringBuffer("a");
                  StringBuffer s2 
          = new StringBuffer("a");
                  s1.equals(s2);
          //為什么是false
                  System.out.println(s1.equals(s2));
                  String s3 
          = new String("a");
                  String s4 
          = new String("a");
                  s3.equals(s4);
          //為什么是true
                  System.out.println(s3.equals(s4));
              }
             


          StringBuffer類中沒有重新定義equals這個方法,因此這個方法就來自Object類,
          而Object類中的equals方法是用來比較地址的,所以等于false.

          String類中重新定義了equals這個方法,而且比較的是值,而不是地址。所以會是
          true。

          主站蜘蛛池模板: 龙海市| 广河县| 孝义市| 包头市| 桑日县| 莱西市| 格尔木市| 大同市| 定陶县| 治县。| 灵台县| 洛扎县| 曲水县| 丘北县| 宜阳县| 肥西县| 金溪县| 阜宁县| 满洲里市| 哈密市| 通山县| 马公市| 南雄市| 榆树市| 得荣县| 客服| 孟州市| 临夏市| 东丰县| 南乐县| 万源市| 奇台县| 沭阳县| 麻城市| 天峨县| 米脂县| 娱乐| 玉龙| 汉中市| 黄龙县| 东丽区|