執(zhí)手麥田的咖啡空間  
          專注于Java的學習研究
          公告
          • 于喧鬧網(wǎng)界之中,尋一處僻靜之所,與三二好友,品程序、論思想,其樂何融融!
            執(zhí)手麥田的咖啡館——在這里關注JAVA的學習研究
          日歷
          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          留言簿(2)

          隨筆分類(13)

          隨筆檔案(13)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          問題:如何理解
          String str=new String("x");

          String str="x";

          在計算機的內(nèi)存中有堆和棧兩塊空間,其中棧中存放所有對象、函數(shù)、變量等的飲用;而堆中存放對象、值等。
          不管是new出的對象還是用類似String str = "x";這類的對象,都是放在堆中的。
          舉一個簡單的例子:
          String str1 = "x" ;
          String str2 = "x" ;
          String str3 = new String("x") ;
          表面上看這三句回實例化3個String對象,實際上是兩個。在java中有一個叫“字符數(shù)據(jù)池”的內(nèi)存管理機制,在對str2賦值之前,會檢查池中有沒有相同的數(shù)據(jù),如果有,則直接引用;若沒有,系統(tǒng)會實例化這個String的對象;而執(zhí)行到String str3 = new String("x") ;系統(tǒng)會直接實例化該對象,而不會在池中查找。也不會將這個對象放在池中。
          你可能會問,如果改動str1或str2時會不會改動另外一個引用的值。答案是不會。系統(tǒng)會首先在池中查找有沒有相同的對象,如果沒有,會實例化這個對象。

          補充一:
          注意,對于new出來的對象則要小心。

          String str3 = new String("x") ;
          String str4 = new String("x") ;
          System.out.println(str4==str3);
          它的打印結(jié)果肯定是false;因為此時new出來的對象并不在一個位置,并不用去檢查字符數(shù)據(jù)池。所以為false。
          只有在執(zhí)行:
          System.out.println(str3.equals(str4));時其值才為true。


          posted on 2007-04-25 10:58 執(zhí)手麥田 閱讀(315) 評論(1)  編輯  收藏 所屬分類: 咖啡館
          評論:
          • # re: 關于Java中String的幾個問題  家家 Posted @ 2007-04-25 11:43
            挺實用的,不錯。便于理解。  回復  更多評論   

           
          Copyright © 執(zhí)手麥田 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 永清县| 钦州市| 朝阳县| 察隅县| 孝义市| 秦安县| 昭平县| 夏邑县| 阳城县| 琼结县| 清苑县| 绵竹市| 麻栗坡县| 柏乡县| 南康市| 开封县| 茌平县| 通江县| 花莲县| 新竹县| 景东| 大荔县| 平南县| 肥西县| 铁力市| 会泽县| 博爱县| 大田县| 中西区| 昌乐县| 清水县| 磐安县| 沁水县| 邹平县| 九龙城区| 兴化市| 昌宁县| 贵德县| 商水县| 大英县| 独山县|