求索

          Make it work, make it right, make it fast and make it open。
          posts - 8, comments - 11, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          String pool

          Posted on 2005-07-15 09:31 Java求索 閱讀(1151) 評論(1)  編輯  收藏 所屬分類: Java
          今天寫代碼涉及到大量的String操作,突然間想起一些關于String與其它class的不同之處,我是我以前在一篇文章上看到的,具體出處實在記不得了,現在加上一點兒自己的理解記錄下來,以作備忘。

          String的特殊之處就是它可以像int等簡單類型一樣,使用“=”來生成一個Object,而不必用new這個關鍵字,為什么呢?先來看下面的代碼:
          import junit.framework.TestCase;

          public class TestStringPool extends TestCase {

              
          private String string1;
              
          private String string2;

              
          protected void setUp() {
                  string1 
          = "abc";
                  string2 
          = "abc";
              }


              
          public void testStringPool() {
                  assertTrue(string1 
          == string2);
              }


              
          public void testNewString() {
                  string1 
          = new String("abc");
                  string2 
          = new String("abc");
                  assertFalse(
          "The objects don't use the 
                      string pool", string1 == string2);
              }

          }

          這里用到了JUnit,用來測試String pool

          第一個測試,說明兩個String是同一個Object,(==就是用來比較objectreference)。而第二個測試則說明兩個String Object不同。

          眾所周知,JavaString不可改變的字符串對象。為了提高效率,JavaString類提供了串池(String pool)。正如大家所看到的那樣,在第一個test中就使用了串池。當你重新聲明一個String型變量為abc時,將使用串池里原來的那個abc,而不重新分配內存,也就是說,string2string1將會指向同一塊內存。所以結果為true。在第二個test case中使用了普通對象的聲明方式,系統將會為string1string2各分配一塊內存。所以結果為false

           結論:我們比較兩個String的值,最好用equals()方法,而最好不要使用==。這就避免了一些不必要的麻煩。另外,聲明String的時候,最好用=,這樣就可以體現String pool的作用了。


          評論

          # re: String pool  回復  更多評論   

          2005-07-15 12:19 by emu
          >>我們比較兩個String的值,最好用equals()方法,而最好不要使用==

          結論是對的,但是跟string pool沒什么關系。

          >>另外,聲明String的時候,最好用=,這樣就可以體現String pool的作用了。

          結論也是對的,但是這樣做不是為了體現String pool的作用而是避免重復創建對象。

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


          網站導航:
           
          主站蜘蛛池模板: 镇安县| 牡丹江市| 延寿县| 拜城县| 兰坪| 崇礼县| 樟树市| 广西| 上高县| 白朗县| 扶余县| 无为县| 庆城县| 兴城市| 绥化市| 深圳市| 犍为县| 水富县| 灵台县| 台东市| 平顺县| 观塘区| 新营市| 乐业县| 佳木斯市| 兴城市| 扶风县| 驻马店市| 商河县| 紫云| 阳山县| 宝清县| 迁西县| 滁州市| 乃东县| 北川| 澎湖县| 铁岭市| 安徽省| 兰考县| 大安市|