亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java String的intern方法

 更新時(shí)間:2016年07月20日 10:48:15   投稿:lqh  
本文主要介紹java 中String 的intern方法,這里主要通過實(shí)例來說明不同版本的JDK,intern方法的對(duì)比,有需要的小伙伴可以參考下

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

 JDK1.6中的intern:   

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

JDK1.7中的intern:   

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

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

下面通過實(shí)例來進(jìn)行驗(yàn)證和解釋:      

實(shí)例:

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下輸出結(jié)果是:

false
false
false

解釋:

①執(zhí)行時(shí)會(huì)在堆內(nèi)存創(chuàng)建一個(gè)值為"str01"的字符串對(duì)象str,同時(shí)在常量池創(chuàng)建一個(gè)"str"以及"01"常量;

②執(zhí)行時(shí)會(huì)首先去常量池中查看是否存在一個(gè)值為"str01"的常量,發(fā)現(xiàn)不存在,JDK1.6的做法就是將該字符串"str01"在常量池中也生成一份;

③執(zhí)行時(shí)會(huì)在常量池中創(chuàng)建一個(gè)"str01"對(duì)象,發(fā)現(xiàn)已經(jīng)存在,因而不會(huì)新建;
第一個(gè)輸出false的原因是:str指向的是堆內(nèi)存的"str01",而str1指向的是常量池中的"str01";

④執(zhí)行時(shí)會(huì)在堆內(nèi)存創(chuàng)建一個(gè)值為"str01"的字符串對(duì)象str2,同時(shí)在常量池中創(chuàng)建一個(gè)值為"str01"的常量;

⑤執(zhí)行時(shí)會(huì)首先去常量池中查看是否存在值為"str01"的常量,發(fā)現(xiàn)存在,則直接返回這個(gè)常量引用;

⑥執(zhí)行時(shí)會(huì)在常量池中創(chuàng)建一個(gè)值為"str01"的常量,如果發(fā)現(xiàn)已經(jīng)存在,則不會(huì)創(chuàng)建;

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

⑦執(zhí)行時(shí)會(huì)在常量池創(chuàng)建一個(gè)值為"str01"的常量;

⑧執(zhí)行時(shí)會(huì)在堆內(nèi)存創(chuàng)建一個(gè)值為"str01"的字符串對(duì)象str5,同時(shí)在常量池創(chuàng)建一個(gè)"str"以及"01"常量;

⑨執(zhí)行時(shí)會(huì)去常量池查看是否存在值為"str01"的常量,發(fā)現(xiàn)存在則直接返回這個(gè)常量引用;
第三個(gè)輸出false的原因是:str5指向的是堆內(nèi)存的"str01",而str4指向的是常量池中的"str01";

在JDK1.7下輸出結(jié)果是:

true
false
false

解釋:

發(fā)現(xiàn)只有第一個(gè)輸出結(jié)果不一樣,所以我們只解釋第一個(gè)的原因:

①執(zhí)行時(shí)會(huì)在堆內(nèi)存創(chuàng)建一個(gè)值為"str01"的字符串對(duì)象str,同時(shí)在常量池創(chuàng)建一個(gè)"str"以及"01"常量;(這點(diǎn)和JDK1.6沒什么區(qū)別)

②執(zhí)行時(shí)會(huì)首先去常量池中查看是否存在一個(gè)值為"str01"的常量,發(fā)現(xiàn)不存在,JDK1.7的做法就是將堆內(nèi)存中"str01"的引用復(fù)制到了常量池中;

③執(zhí)行時(shí)會(huì)在常量池中創(chuàng)建一個(gè)"str01"對(duì)象,發(fā)現(xiàn)已經(jīng)存在,因而不會(huì)新建;
那么此時(shí)的str和str1都將指向的是堆內(nèi)存中的"str01"的值,所以兩者相等;

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

相關(guān)文章

  • Java?流處理之收集器詳解

    Java?流處理之收集器詳解

    這篇文章主要介紹了Java?流處理之收集器,本文以記錄?Record?為例,結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • SpringMvc3+extjs4實(shí)現(xiàn)上傳與下載功能

    SpringMvc3+extjs4實(shí)現(xiàn)上傳與下載功能

    這篇文章主要為大家詳細(xì)介紹了SpringMvc3+extjs4實(shí)現(xiàn)上傳與下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java調(diào)用mysql存儲(chǔ)過程實(shí)例分析

    java調(diào)用mysql存儲(chǔ)過程實(shí)例分析

    這篇文章主要介紹了java調(diào)用mysql存儲(chǔ)過程的方法,以實(shí)例形式較為詳細(xì)的分析了mysql數(shù)據(jù)庫的建立和存儲(chǔ)過程的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-06-06
  • MyBatisPlus條件構(gòu)造器的實(shí)現(xiàn)示例

    MyBatisPlus條件構(gòu)造器的實(shí)現(xiàn)示例

    本文主要介紹了MyBatisPlus條件構(gòu)造器的實(shí)現(xiàn)示例,主要包括了QueryWrapper,UpdateWrapper,LambdaQueryWrapper,LambdaUpdateWrapper這四種,具有一定的參考價(jià)值,感興趣的可以了解下
    2023-12-12
  • Java方法簽名的獲取實(shí)例代碼

    Java方法簽名的獲取實(shí)例代碼

    這篇文章主要介紹了Java方法簽名的獲取實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 詳解spring security安全防護(hù)

    詳解spring security安全防護(hù)

    這篇文章主要介紹了詳解spring security安全防護(hù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • java向文件末尾添加內(nèi)容示例分享

    java向文件末尾添加內(nèi)容示例分享

    本文為大家提供一個(gè)java向文件末尾添加內(nèi)容的示例分享,大家參考使用吧
    2014-01-01
  • SpringBoot配置文件方式,在線yml文件轉(zhuǎn)properties

    SpringBoot配置文件方式,在線yml文件轉(zhuǎn)properties

    這篇文章主要介紹了SpringBoot配置文件方式,在線yml文件轉(zhuǎn)properties,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • springboot2.6.3讀取不到nacos上的配置文件問題

    springboot2.6.3讀取不到nacos上的配置文件問題

    這篇文章主要介紹了springboot2.6.3讀取不到nacos上的配置文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring?boot?集成?MQTT詳情

    Spring?boot?集成?MQTT詳情

    這篇文章主要介紹了Spring?boot?集成?MQTT詳情,MQTT是一種基于發(fā)布/訂閱模式的"輕量級(jí)"通訊協(xié)議,可以以極少的代碼和有限的帶寬為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服,下文更多相關(guān)介紹,需要的小伙伴可以參考一下
    2022-04-04

最新評(píng)論