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

          導航

          留言簿(2)

          隨筆分類(13)

          隨筆檔案(13)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

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

          String str="x";

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

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

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


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

           
          Copyright © 執手麥田 Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 常州市| 宁都县| 永州市| 布尔津县| 元江| 江山市| 洛扎县| 蚌埠市| 大安市| 山东| 菏泽市| 积石山| 秦皇岛市| 林西县| 广昌县| 福鼎市| 安阳县| 湛江市| 信宜市| 高州市| 怀集县| 犍为县| 巫溪县| 山东省| 会昌县| 阿克陶县| 海安县| 昭通市| 浦东新区| 时尚| 平泉县| 古田县| 绥江县| 宝山区| 龙里县| 农安县| 上虞市| 新宁县| 日喀则市| 法库县| 进贤县|