一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java String的intern方法

java String的intern方法

2020-05-29 14:33lqh JAVA教程

本文主要介紹java 中String 的intern方法,這里主要通過實例來說明不同版本的JDK,intern方法的對比,有需要的小伙伴可以參考下

首先我們應該清楚的是JDK1.6和JDK1.7中String類的intern方法還是有差別的: 

 JDK1.6中的intern:  

調用intern方法的時候首先會去常量池中查看是否存在與當前String值相同的值,如果存在的話,則直接返回常量池中這個String值的引用;如果不存在的話,則會將原先堆中的該字符串拷貝一份到常量池中。  

JDK1.7中的intern:  

調用intern方法的時候首先會去常量池中查看是否存在與當前String值相同的值,如果存在的話,則直接返回常量池中這個String值的引用;如果不存在的話,則只會將原先堆中該字符串的引用放置在常量池中,并不會將拷貝整個字符串到常量池中。   

這也就說明,JDK1.6和JDK1.7對于常量池中不存在此字符串的情況處理不同。    

下面通過實例來進行驗證和解釋:      

實例:

java" id="highlighter_247495">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
  String str = "str"+new String("01");①
  str.intern();②
  String str1 = "str01";③
  System.out.println(str == str1);
   
  String str2 = new String("str01");④
  str2.intern();⑤
  String str3 = "str01";⑥
  System.out.println(str2 == str3);
   
  String str4 = "str01";⑦
  String str5 = new String("str")+new String("01");⑧
  str5.intern();⑨
  System.out.println(str4 == str5);

在JDK1.6下輸出結果是:

false
false
false

解釋:

①執行時會在堆內存創建一個值為"str01"的字符串對象str,同時在常量池創建一個"str"以及"01"常量;

②執行時會首先去常量池中查看是否存在一個值為"str01"的常量,發現不存在,JDK1.6的做法就是將該字符串"str01"在常量池中也生成一份;

③執行時會在常量池中創建一個"str01"對象,發現已經存在,因而不會新建;
第一個輸出false的原因是:str指向的是堆內存的"str01",而str1指向的是常量池中的"str01";

④執行時會在堆內存創建一個值為"str01"的字符串對象str2,同時在常量池中創建一個值為"str01"的常量;

⑤執行時會首先去常量池中查看是否存在值為"str01"的常量,發現存在,則直接返回這個常量引用;

⑥執行時會在常量池中創建一個值為"str01"的常量,如果發現已經存在,則不會創建;

第二個輸出false的原因是:str2指向的是堆內存的"str01",而str3指向的是常量池中的"str01";

⑦執行時會在常量池創建一個值為"str01"的常量;

⑧執行時會在堆內存創建一個值為"str01"的字符串對象str5,同時在常量池創建一個"str"以及"01"常量;

⑨執行時會去常量池查看是否存在值為"str01"的常量,發現存在則直接返回這個常量引用;
第三個輸出false的原因是:str5指向的是堆內存的"str01",而str4指向的是常量池中的"str01";

在JDK1.7下輸出結果是:

true
false
false

解釋:

發現只有第一個輸出結果不一樣,所以我們只解釋第一個的原因:

①執行時會在堆內存創建一個值為"str01"的字符串對象str,同時在常量池創建一個"str"以及"01"常量;(這點和JDK1.6沒什么區別)

②執行時會首先去常量池中查看是否存在一個值為"str01"的常量,發現不存在,JDK1.7的做法就是將堆內存中"str01"的引用復制到了常量池中;

③執行時會在常量池中創建一個"str01"對象,發現已經存在,因而不會新建;
那么此時的str和str1都將指向的是堆內存中的"str01"的值,所以兩者相等;

以上就是對JDK1.6和JDK1.7中String類的intern方法的對比,是有差別的,有需要的朋友可以參考下。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 3d动漫h在线观看网站蜜芽 | 成年人在线视频免费观看 | www.5151淫| 欧美同性猛男videos | 国产成人99精品免费观看 | 日本高清在线不卡 | 欧美成黑人性猛交xxoo | 92在线视频 | 国内精品自产拍在线观看91 | 天天操天天爽天天射 | 香蕉免费一区二区三区在线观看 | ady久久| 九九精品国产兔费观看久久 | 校花被老头夺去第一次动图 | 天美视频在线 | 日本高清不卡一区久久精品 | 欧美三级不卡在线观线看高清 | 日本加勒比在线播放 | avtt在线观看 | 九九热精品免费观看 | 无码区国产区在线播放 | 深夜免费网站 | 男人把大ji巴放进女人小说 | 插得好爽 | 大香焦在线观看 | 白丝爆动漫羞羞动漫网站 | 精品一久久香蕉国产线看播放 | 草久久网 | 楚乔传第二部免费播放电视连续剧 | 精品一区二区三区高清免费观看 | 8mav福利视频 | 7777色鬼xxxx欧美色夫 | 国产人妖ts在线视频网 | 国产香蕉97碰碰在线视频 | 欧美一区二区不卡视频 | 欧美日韩国产一区二区三区在线观看 | 欧美视频一二三区 | 亚洲视频一区二区在线观看 | 亚洲国产日韩制服在线观看 | 亚洲社区在线观看 | 欧美日韩一区二区三在线 |