棲息地

          家園

          String的兩個語句的區別!

                 這是自己找別人的,所以不算是自己的勞動成果,借用一下,方便自己看,也方便只想知道下面兩個語句區別的人,不要見怪??!
          String a=new String("hello");和String a="hello";的區別,(1)前者是直接開辟一個內存空間,其中保存的數據為字符串hello,同時申請一個引用變量a將為字符串開辟的內存地址賦值給a :而對于后者,后臺的操作是:首先查看“字符串池”中是否存在hello這個字面量,如果存在,則將該字面量的內存地址賦值給b,如果沒有,剛在“字符串池“中生成一個hello字面量,將新生成的字面量的內存地址賦值給b.
                   (2)前者是在程序運行時,在內存開辟的空間,而后者是在程序編譯時就為之開了內存空間。
                (3)前者用new 關健字,相當于創建了一個對象的引用,是在運行時完成,后者則是在編譯時就完成的字符串學量。
                  看如下代碼:
                       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文件中的一些數據,它包括了關于類,方法,接口等的常量,也包括字符串常量)中的"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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 龙川县| 黄大仙区| 平阳县| 富顺县| 雅安市| 年辖:市辖区| 庆元县| 巨鹿县| 南丹县| 读书| 松原市| 连州市| 宝坻区| 高州市| 鹿泉市| 郧西县| 宜昌市| 南部县| 额敏县| 西乌| 阜康市| 凯里市| 宾川县| 揭西县| 武汉市| 永州市| 新乡市| 四川省| 西林县| 江西省| 资讯 | 绥德县| 益阳市| 海盐县| 松原市| 蓝田县| 河曲县| 仁怀市| 凌源市| 余干县| 聂荣县|