<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      String中intern的方法

      首先查看官方API那個的解釋:

      ———————————————————————————————————————

      intern

      public String intern()

      返回字符串對象的規范化表示形式。

      一個初始時為空的字符串池,它由類 String 私有地維護。

      當調用 intern 方法時,如果池已經包含一個等于此 String 對象的字符串(該對象由 equals(Object) 方法確定),則返回池中的字符串。否則,將此 String 對象添加到池中,并且返回此 String 對象的引用。

      它遵循對于任何兩個字符串 s 和 t,當且僅當 s.equals(t) 為 true 時,s.intern() == t.intern() 才為 true。

      所有字面值字符串和字符串賦值常量表達式都是內部的。

      返回:

      一個字符串,內容與此字符串相同,但它保證來自字符串池中。

       

      ———————————————————————————————————————

      盡管在輸出中調用intern方法并沒有什么效果,但是實際上后臺這個方法會做一系列的動作和操作。在調用”ab”.intern()方法的時候會返回”ab”,但是這個方法會首先檢查字符串池中是否有”ab”這個字符串,如果存在則返回這個字符串的引用,否則就將這個字符串添加到字符串池中,然會返回這個字符串的引用。

      可以看下面一個范例:

      1 String str1 = "a";
      2 String str2 = "b";
      3 String str3 = "ab";
      4 String str4 = str1 + str2;
      5 String str5 = new String("ab");
      6
      7 System.out.println(str5.equals(str3));
      8 System.out.println(str5 == str3);
      9 System.out.println(str5.intern() == str3);
      10 System.out.println(str5.intern() == str4);

      得到的結果:

      true

      false

      true

      false

       

      為什么會得到這樣的一個結果呢?我們一步一步的分析。

      第一、str5.equals(str3)這個結果為true,不用太多的解釋,因為字符串的值的內容相同。

      第二、str5 == str3對比的是引用的地址是否相同,由于str5采用new String方式定義的,所以地址引用一定不相等。所以結果為false。

      第三、當str5調用intern的時候,會檢查字符串池中是否含有該字符串。由于之前定義的str3已經進入字符串池中,所以會得到相同的引用。

      第四,當str4 = str1 + str2后,str4的值也為”ab”,但是為什么這個結果會是false呢?先看下面代碼:

      1 String a = new String("ab");
      2 String b = new String("ab");
      3 String c = "ab";
      4 String d = "a" + "b";
      5 String e = "b";
      6 String f = "a" + e;
      7
      8 System.out.println(b.intern() == a);
      9 System.out.println(b.intern() == c);
      10 System.out.println(b.intern() == d);
      11 System.out.println(b.intern() == f);
      12 System.out.println(b.intern() == a.intern());

      運行結果:

      false

      true

      true

      false

      true

      由運行結果可以看出來,b.intern() == a和b.intern() == c可知,采用new 創建的字符串對象不進入字符串池,并且通過b.intern() == d和b.intern() == f可知,字符串相加的時候,都是靜態字符串的結果會添加到字符串池,如果其中含有變量(如f中的e)則不會進入字符串池中。但是字符串一旦進入字符串池中,就會先查找池中有無此對象。如果有此對象,則讓對象引用指向此對象。如果無此對象,則先創建此對象,再讓對象引用指向此對象。

          當研究到這個地方的時候,突然想起來經常遇到的一個比較經典的Java問題,就是對比equal和==的區別,當時記得老師只是說“==”判斷的是“地址”,但是并沒說清楚什么時候會有地址相等的情況。現在看來,在定義變量的時候賦值,如果賦值的是靜態的字符串,就會執行進入字符串池的操作,如果池中含有該字符串,則返回引用。

      執行下面的代碼:

      1 String a = "abc";
      2 String b = "abc";
      3 String c = "a" + "b" + "c";
      4 String d = "a" + "bc";
      5 String e = "ab" + "c";
      6
      7 System.out.println(a == b);
      8 System.out.println(a == c);
      9 System.out.println(a == d);
      10 System.out.println(a == e);
      11 System.out.println(c == d);
      12 System.out.println(c == e);

      運行的結果:

      true

      true

      true

      true

      true

      true

      運行的結果剛好驗證了我剛才的猜想。

      posted @ 2010-10-21 15:02  一沙鷗  閱讀(46556)  評論(12)    收藏  舉報
      主站蜘蛛池模板: 亚洲国产成人久久精品不卡| 日韩理伦片一区二区三区| 四虎库影成人在线播放| 精品一区二区三区日韩版| 国产精品亚洲二区亚瑟| 亚洲男人AV天堂午夜在| 国产99在线 | 欧美| 色成年激情久久综合国产| 中文字幕无码不卡一区二区三区| 无码尹人久久相蕉无码| 国产精品一线二线三线区| 亚洲V天堂V手机在线| 久久精品国产亚洲av麻豆软件| 国产自在自线午夜精品 | 日本中文字幕不卡在线一区二区 | 国产一区二区在线影院| 亚洲天天堂天堂激情性色| 普兰店市| 亚洲人成电影在线天堂色| 精品人妻少妇一区二区三区在线| 无码一区二区波多野结衣播放搜索| 女同精品女同系列在线观看| AV教师一区高清| 国产午夜福利视频第三区| 黄色A级国产免费大片视频| 依依成人精品视频在线观看 | 最新国产AV最新国产在钱| 亚洲精品中文字幕尤物综合| 日本一区三区高清视频| 韩国19禁无遮挡啪啪无码网站| 国产精品免费第一区二区| 亚洲国产精品一区二区第一页| 国内精品免费久久久久电影院97| 奇米四色7777中文字幕| 中文国产不卡一区二区| 亚洲一区二区av免费| 久久精品国产亚洲av天海翼 | 亚洲综合色婷婷中文字幕| 99e久热只有精品8在线直播| 国产精品国产三级国快看| 精品国产乱码久久久久夜深人妻|