隨筆 - 20  文章 - 57  trackbacks - 0
          <2010年10月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(2)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          51CTO

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜


          完全用例子告訴你!不過(guò)首先你要清楚問(wèn)題問(wèn)的是什么?

          首先,因該明白String是引用類(lèi)型,是一個(gè)類(lèi),是一個(gè)不可變的類(lèi),并且有著特殊的作用。
          String 只能復(fù)制一次!復(fù)制后不可改變!

          String s = new String(“abc”);
          s = new String(“cba”);
           
          以上的代碼并不是對(duì)s進(jìn)行賦值,而是將“abc”的引用地址,從新賦給了s;
          這個(gè)過(guò)程的內(nèi)存是怎么分配的呢?



          有幾個(gè)問(wèn)題要給大家說(shuō)明一下:


          1.String s = new String("abc");//在運(yùn)行時(shí)涉及幾個(gè)String實(shí)例?
            
              答案:兩個(gè),一個(gè)是字符串字面量"xyz"所對(duì)應(yīng)的、駐留(intern)在一個(gè)全局共享的字符串常量池中的實(shí)例,另一個(gè)是通過(guò)new String(String)創(chuàng)建并初始化的、內(nèi)容與"xyz"相同的實(shí)例。


          2.String s = new String("abc");//涉及用戶聲明的幾個(gè)String類(lèi)型的變?

              答案:一個(gè),就一個(gè)String s 。


          3.String s = null;
            
              Java里變量就是變量,引用類(lèi)型的變量只是對(duì)某個(gè)對(duì)象實(shí)例或者null的引用,不是實(shí)例本身。聲明變量的個(gè)數(shù)跟創(chuàng)建實(shí)例的個(gè)數(shù)沒(méi)有必然關(guān)系。


          4.String s = new String("abc");//創(chuàng)建了幾個(gè)String Object?

              答案:兩個(gè),一個(gè)是“abc”——這是一個(gè)匿名對(duì)象;一個(gè)是指向“abc”的引用對(duì)象s——這個(gè)是將匿名對(duì)象的地址賦給了s。


          下面我們來(lái)看一段代碼:

          public class text{
             
             public static void main(String[] args){
                //定義一個(gè)str
                String str = new String("abc");
                //定義一個(gè)str1
                String str1 = "abc";
                //定義一個(gè)str2
                String str2 = "abc";
               
                System.out.println(str1 == str);
                System.out.println(str2 == str1);


          }
           
          }

          運(yùn)行結(jié)果是什么呢?




          為什么第一個(gè)運(yùn)行結(jié)果是false呢?  在這里"==" 其實(shí)比較的是他們?cè)诙褍?nèi)存中的地址,因?yàn)閟tr 和 str1 在堆內(nèi)存中的地址不同的所以運(yùn)行結(jié)果是false;
          為什么第二個(gè)運(yùn)行結(jié)果是true呢?   在這要說(shuō)明一下,Sting是一個(gè)共享式輸出類(lèi)型,在內(nèi)存中有一個(gè)String pool 用于存放String類(lèi)型中相同的值。所以在給str2賦值的時(shí)候,JVM會(huì)在String pool中查找是否有與其所賦的值相等,如果相等就將相等的值的地址賦給str2,如果沒(méi)有則在String pool中新開(kāi)辟一塊控件存放str2的內(nèi)容。


          這是我現(xiàn)在對(duì)String的一些理解,如果有錯(cuò)誤,希望大家指出來(lái),在這里謝謝大家了!
























          posted on 2010-10-16 23:51 tovep 閱讀(376) 評(píng)論(4)  編輯  收藏

          FeedBack:
          # re: Java_String小結(jié) 2010-10-17 12:42 迷人笑笑
          這是用什么工具畫(huà)的圖?。??外觀不錯(cuò)-呵呵---  回復(fù)  更多評(píng)論
            
          # re: Java_String小結(jié) 2010-10-17 18:57 Tovep
          @迷人笑笑
          用的是QQ的截圖做的! 呵呵!  回復(fù)  更多評(píng)論
            
          # re: Java_String小結(jié) 2010-11-10 20:01 小六夜瘋狂
          字符串常量池?
          “==”和equals  回復(fù)  更多評(píng)論
            
          # re: Java_String小結(jié) 2010-11-10 21:14 Tovep
          @小六夜瘋狂
          你可以這么理解:

          "=="比較的是棧內(nèi)存中的內(nèi)容,僅僅是內(nèi)容?。?!

          "equals"比較的是對(duì)內(nèi)存中內(nèi)容,而不是棧內(nèi)存中內(nèi)容,比如你想返回TRUE:棧內(nèi)存中的內(nèi)容可以不同(也就是他們指向堆內(nèi)存中地址不同),但是他們?cè)诙褍?nèi)存中的內(nèi)容必須相同!!!  回復(fù)  更多評(píng)論
            

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


          網(wǎng)站導(dǎo)航:
           
          主頁(yè) 主站蜘蛛池模板: 贺兰县| 大连市| 龙江县| 长乐市| 德州市| 湟中县| 子洲县| 林甸县| 绵阳市| 嵩明县| 策勒县| 贵德县| 新和县| 泽库县| 永善县| 若羌县| 永寿县| 广汉市| 烟台市| 肇州县| 永胜县| 遂溪县| 靖江市| 墨江| 灌阳县| 大余县| 巴彦淖尔市| 洪江市| 阿巴嘎旗| 花莲市| 武夷山市| 连南| 沅陵县| 霍城县| 霍州市| 南昌市| 湛江市| 贺州市| 曲靖市| 台北县| 木里|