求索

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

          String pool

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

          String的特殊之處就是它可以像int等簡(jiǎn)單類(lèi)型一樣,使用“=”來(lái)生成一個(gè)Object,而不必用new這個(gè)關(guān)鍵字,為什么呢?先來(lái)看下面的代碼:
          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,用來(lái)測(cè)試String pool

          第一個(gè)測(cè)試,說(shuō)明兩個(gè)String是同一個(gè)Object,(==就是用來(lái)比較objectreference)。而第二個(gè)測(cè)試則說(shuō)明兩個(gè)String Object不同。

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

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


          評(píng)論

          # re: String pool  回復(fù)  更多評(píng)論   

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

          結(jié)論是對(duì)的,但是跟string pool沒(méi)什么關(guān)系。

          >>另外,聲明String的時(shí)候,最好用=,這樣就可以體現(xiàn)String pool的作用了。

          結(jié)論也是對(duì)的,但是這樣做不是為了體現(xiàn)String pool的作用而是避免重復(fù)創(chuàng)建對(duì)象。

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 革吉县| 论坛| 河间市| 宜都市| 定远县| 宜兰市| 仁怀市| 南陵县| 清徐县| 荔波县| 屯留县| 保靖县| 喜德县| 弋阳县| 芦山县| 桃园市| 望都县| 汽车| 定兴县| 天津市| 关岭| 甘洛县| 彝良县| 贵定县| 库车县| 蓬溪县| 华安县| 明水县| 亚东县| 太湖县| 洛川县| 卫辉市| 布尔津县| 融水| 济南市| 宜章县| 福泉市| 凉山| 土默特右旗| 德保县| 平罗县|