国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

String類的intern內部化方法釋疑

2019-11-18 13:09:07
字體:
來源:轉載
供稿:網友

  相信絕大多數的人不會去用String類的intern方法,打開String類的源碼發現這是一個本地方法,定義如下:
  public native String intern();
  
  文檔告訴我們該方法返回一個字符串對象的內部化引用:由String類維護一個初始為空的字符串的對象池,當intern方法被調用時,假如對象池中已經包含這一個相等的字符串對象則返回對象池中的實例,否則添加字符串到對象池并返回該字符串的引用。
  
  從程序的角度上怎么來看這個方法呢,我們假設有兩個字符串s1,s2,當s1.equals(s2)時,s1.intern()==s2.intern(),也就是說這兩個字符串在內存中使用的是同一個實例。
  
  java語言規范中定義了字符串文字以及更一般的常量表達式的值的字符串是被內部化的,以便它們共享同一個實例。我們試驗一下下面代碼
  
  String s1 = "你好,Java自由人";
  String s2 = "你好," + "Java自由人";
  System.out.PRintln(s1==s2);
  System.out.println(s1.intern()==s2.intern());
  
  這段代碼將打印兩個true,也就是說字符串s1和s2是共享同一個實例。不過前提是盡管使用了表達式,但是表達式中必須都是常量。
  
  當然我現在還想不出這個方法到底有什么用,不過算是對Java虛擬機內部組織結構的一些了解,同時了解這個處理機制也可以讓我們在用到字符串常量的時候了解如何節省這些字符串所占用的內存。
  
  很希奇的是intern這個方法居然在JBuilder 2005上被告知是一個未定義的方法,在Eclipse中表現很正常。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵山县| 拉孜县| 胶南市| 金坛市| 富锦市| 朝阳市| 黔江区| 依安县| 祁东县| 甘孜县| 平邑县| 宜兰市| 米林县| 泗阳县| 吉木萨尔县| 五寨县| 湖口县| 大新县| 横峰县| 庆云县| 石林| 千阳县| 兴国县| 南澳县| 海淀区| 冀州市| 长岭县| 南充市| 丰镇市| 涡阳县| 祁门县| 松江区| 申扎县| 巴中市| 来安县| 保定市| 兴山县| 营山县| 洛浦县| 鸡西市| 胶州市|