棲息地

          家園

          String的兩個語句的區(qū)別!

                 這是自己找別人的,所以不算是自己的勞動成果,借用一下,方便自己看,也方便只想知道下面兩個語句區(qū)別的人,不要見怪啊!
          String a=new String("hello");和String a="hello";的區(qū)別,(1)前者是直接開辟一個內(nèi)存空間,其中保存的數(shù)據(jù)為字符串hello,同時申請一個引用變量a將為字符串開辟的內(nèi)存地址賦值給a :而對于后者,后臺的操作是:首先查看“字符串池”中是否存在hello這個字面量,如果存在,則將該字面量的內(nèi)存地址賦值給b,如果沒有,剛在“字符串池“中生成一個hello字面量,將新生成的字面量的內(nèi)存地址賦值給b.
                   (2)前者是在程序運行時,在內(nèi)存開辟的空間,而后者是在程序編譯時就為之開了內(nèi)存空間。
                (3)前者用new 關健字,相當于創(chuàng)建了一個對象的引用,是在運行時完成,后者則是在編譯時就完成的字符串學量。
                  看如下代碼:
                       String s0="hello";
                       String s1="hello";
                       String s2="he"+"llo";
                       System.out.println(s0=s1);
                      System.out.println(s1=s2);
          運行的結果是:true;
                                      true;
          因為例子中的s0和s1中的“hello"在編譯期就被確定了,所以s0==s1為真;而"he"和"llo"也都是字符串常量,當一個字符串常量連接成時,它自己也定是字符串常量,所s2也同樣在編譯期就被解析為一個字符串常量,所以s2也是常量池(constant pool 指的是在編譯期被確定,并被保存在已編譯的.clas文件中的一些數(shù)據(jù),它包括了關于類,方法,接口等的常量,也包括字符串常量)中的"hello"的一個引用。

                       

                       String s0=new String ("hello");
                       String s1=new String ("hello");
                       Stirng s2=new String(“he")+"llo";
                       System.out.println(s0==s1);
                      System.out.println(s1==s2);
                       System.out.println(s0==s1);
          結果則是
                       false
                       false
                      false




           

          posted on 2008-11-19 19:35 drecry 閱讀(263) 評論(0)  編輯  收藏


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 来安县| 合江县| 黎平县| 常山县| 长垣县| 周宁县| 定兴县| 红安县| 旬邑县| 三河市| 绥棱县| 百色市| 会东县| 九龙县| 中江县| 慈利县| 荣成市| 钦州市| 襄樊市| 无锡市| 长治市| 满城县| 松潘县| 老河口市| 建宁县| 新蔡县| 武强县| 芦山县| 农安县| 桐梓县| 安达市| 合江县| 天津市| 枣庄市| 岳普湖县| 潜江市| 兴文县| 麟游县| 固原市| 盱眙县| 蓬莱市|