posts - 17,  comments - 14,  trackbacks - 0

          String是在java編程中用的最多的數據類型,因此也有很多與其他數據類型不同的性質。

          創(chuàng)建字符串可以用的命令有:

          String str="abc";//創(chuàng)建str字符串,內容為abc。

          String str=new String("abc");//創(chuàng)建str字符串,內容為abc。

          雖然兩種方法都可以創(chuàng)建,但是卻有很大的不同。

          分析一下這兩句命令:

          String str="abc";

          這句程序的內存分配情況為:

          16

          首先在棧內存中為str開辟空間,然后在堆內存中開辟匿名字符串abc的空間,再由str指向abc的空間。這種方法很簡單,也很方便,而且在堆內存中也只開辟了一塊內容為abc的空間,沒有多余的空間。

          如果寫語句:String str1="abc";創(chuàng)建一個str1字符串,內容同樣為abc,那么內存空間的開辟和指向情況為:

          17

          可以看到str和str1指向同一塊堆內存,這是為什么呢?因為String用的最多,很特殊,因為對于String來講使用直接賦值的方式會在字符串池中保存內容。如果之后在聲明字符串的時候發(fā)現內容一樣,則不會重新開辟空間,而是從內存池中取出數據繼續(xù)使用。

          String str=new String("abc");

          這句程序的內存分配情況為:

          18

          19

          這句程序會在堆內存中開辟一塊內容為abc的匿名空間,然后再new一塊空間,賦值abc,并有str指向這里,這時候匿名空間由于沒有棧指向成為垃圾,然后被回收。

          可以發(fā)現,程序開辟了兩個空間,與前一個相比慢多了。所以在開發(fā)中絕對不能使用關鍵字new實例化String類。而且,如果直接使用賦值的方式也可以減少堆內存的開銷。

          posted on 2010-10-16 23:46 Mineralwasser 閱讀(2327) 評論(4)  編輯  收藏

          FeedBack:
          # re: String的兩種實例化方式的區(qū)別
          2011-04-25 17:01 | 曾國泰
          筆試碰到了這道題。。悲劇了。。哎。。  回復  更多評論
            
          # re: String的兩種實例化方式的區(qū)別
          2012-02-12 10:51 | Ma
          你對string分析得很具體,到位.  回復  更多評論
            
          # re: String的兩種實例化方式的區(qū)別
          2015-09-25 15:25 | jjx
          講的很好。  回復  更多評論
            
          # re: String的兩種實例化方式的區(qū)別
          2016-07-02 11:07 | 小學員
          String a=new String();
          a="hello";
          為何不報錯?  回復  更多評論
            

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


          網站導航:
           
          <2012年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          26272829123
          45678910

          常用鏈接

          留言簿(1)

          文章檔案(21)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 凤阳县| 柳林县| 驻马店市| 普兰店市| 宾川县| 惠来县| 南溪县| 高碑店市| 会同县| 山阳县| 瑞安市| 佳木斯市| 嘉祥县| 武鸣县| 哈密市| 新竹市| 昌黎县| 巴青县| 革吉县| 海南省| 鹤岗市| 青龙| 丁青县| 松潘县| 平舆县| 和顺县| 丹寨县| 仪征市| 彭山县| 大悟县| 尚志市| 鹤山市| 塔河县| 会同县| 泾川县| 神池县| 静安区| 莒南县| 浠水县| 东明县| 沐川县|