最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java包裝類的緩存機(jī)制原理實(shí)例詳解

 更新時(shí)間:2019年12月23日 15:23:48   作者:陳明羽  
這篇文章主要介紹了Java包裝類的緩存機(jī)制原理實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java包裝類的緩存機(jī)制原理實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

java 包裝類的緩存機(jī)制,是在Java 5中引入的一個(gè)有助于節(jié)省內(nèi)存、提高性能的功能,只有在自動(dòng)裝箱時(shí)有效

Integer包裝類

舉個(gè)栗子:

Integer a = 127;
Integer b = 127;
System.out.println(a == b);

這段代碼輸出的結(jié)果為true

使用自動(dòng)裝箱將基本類型轉(zhuǎn)為封裝類對(duì)象這個(gè)過程其實(shí)底層實(shí)現(xiàn)是調(diào)用封裝類的valueOf方法:

Integer a =127; 相當(dāng)于 Integer a = Integer.valueOf(127);

看一下Integer的valueOf方法:

public static Integer valueOf(int i) {
  if (i >= IntegerCache.low && i <= IntegerCache.high)
    return IntegerCache.cache[i + (-IntegerCache.low)];
  return new Integer(i);
}

如果入?yún)?i 大于等于IntegerCache.low或者小于等于IntegerCache.high),就從IntegerCache中獲取對(duì)象

看一下IntegerCache:

private static class IntegerCache {
  static final int low = -128;
  static final int high;
  static final Integer cache[];

  static {
    // high value may be configured by property
    int h = 127;
    String integerCacheHighPropValue =
      sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
    if (integerCacheHighPropValue != null) {
      try {
        int i = parseInt(integerCacheHighPropValue);
        i = Math.max(i, 127);
        // Maximum array size is Integer.MAX_VALUE
        h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
      } catch( NumberFormatException nfe) {
        // If the property cannot be parsed into an int, ignore it.
      }
    }
    high = h;

    cache = new Integer[(high - low) + 1];
    int j = low;
    for(int k = 0; k < cache.length; k++)
      cache[k] = new Integer(j++);

    // range [-128, 127] must be interned (JLS7 5.1.7)
    assert IntegerCache.high >= 127;
  }

  private IntegerCache() {}
}

默認(rèn)范圍為:-128到127之間,范圍的最大值可以通過java.lang.Integer.IntegerCache.high設(shè)置,通過for循環(huán)將范圍內(nèi)的數(shù)據(jù)實(shí)例化為Integer對(duì)象放到cache數(shù)組里

在測(cè)試一下:

Integer a = 128;
Integer b = 128;
System.out.println(a == b);

輸出結(jié)果為false,所以如果沒有指定cache最大值時(shí),在-128到127之間使用自動(dòng)裝箱時(shí),會(huì)使用緩存

Byte包裝類

再舉個(gè)栗子:

public static void main(String[] args) {
  Byte a = 127;
  Byte b = 127;
  System.out.println(a == b); //true
}

由于Byte范圍在-128到127之間,所以Byte的valueOf都是從ByteCache緩存中獲取的

public static Byte valueOf(byte b) {
  final int offset = 128;
  return ByteCache.cache[(int)b + offset];
}

ByteCache類:

private static class ByteCache {
  private ByteCache(){}

  static final Byte cache[] = new Byte[-(-128) + 127 + 1];

  static {
    for(int i = 0; i < cache.length; i++)
      cache[i] = new Byte((byte)(i - 128));
  }
}

與IntegerCache相比,ByteCache的最大值是不能修改的就是127

Short包裝類

public static Short valueOf(short s) {
  final int offset = 128;
  int sAsInt = s;
  if (sAsInt >= -128 && sAsInt <= 127) { // must cache
    return ShortCache.cache[sAsInt + offset];
  }
  return new Short(s);
}

ShortCache類:

private static class ShortCache {
  private ShortCache(){}

  static final Short cache[] = new Short[-(-128) + 127 + 1];

  static {
    for(int i = 0; i < cache.length; i++)
      cache[i] = new Short((short)(i - 128));
  }
}

ShortCache的最大值也不可以修改,范圍只能在-128 ~ 127之間

Long包裝類的valueOf方法和LongCache類與Short包裝類的實(shí)現(xiàn)一致,范圍也是只能在-128 ~ 127之間

Character包裝類

valueOf方法:

public static Character valueOf(char c) {
  if (c <= 127) { // must cache
    return CharacterCache.cache[(int)c];
  }
  return new Character(c);
}

CharacterCache類:

private static class CharacterCache {
  private CharacterCache(){}

  static final Character cache[] = new Character[127 + 1];

  static {
    for (int i = 0; i < cache.length; i++)
      cache[i] = new Character((char)i);
  }
}

Character的緩存范圍在0 ~ 127之間

Boolean包裝類

valueOf方法:

public static Boolean valueOf(boolean b) {
  return (b ? TRUE : FALSE);
}

TRUE跟FALSE都是static final修飾的靜態(tài)變量

public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);

Float包裝類 & Double包裝類

valueOf方法:

public static Float valueOf(float f) {
  return new Float(f);
}
public static Double valueOf(double d) {
  return new Double(d);
}

Float和Double沒有使用緩存,直接new的對(duì)象

總結(jié):

java的包裝類中:Byte,Short,Integer,Long,Character使用static代碼塊進(jìn)行初始化緩存,其中Integer的最大值可以通過java.lang.Integer.IntegerCache.high設(shè)置;Boolean使用static final實(shí)例化的對(duì)象;Float和Double直接new的對(duì)象沒有使用緩存

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Mybatis中的PooledDataSource

    詳解Mybatis中的PooledDataSource

    這篇文章主要介紹了詳解Mybatis中的PooledDataSource,PooledDataSource使用了數(shù)據(jù)庫(kù)連接池可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池的重復(fù)利用,還能控制連接數(shù)據(jù)庫(kù)的連接上限
    2022-06-06
  • Spring Boot不同版本Redis設(shè)置JedisConnectionFactory詳解

    Spring Boot不同版本Redis設(shè)置JedisConnectionFactory詳解

    本文章向大家介紹Spring Boot不同版本Redis設(shè)置JedisConnectionFactory,主要內(nèi)容包括1.X 版本、2.X 版本、2.、基本概念、基礎(chǔ)應(yīng)用、原理機(jī)制和需要注意的事項(xiàng)等,并結(jié)合實(shí)例形式分析了其使用技巧,希望通過本文能幫助到大家理解應(yīng)用這部分內(nèi)容
    2023-09-09
  • java開發(fā)SpringBoot參數(shù)校驗(yàn)過程示例教程

    java開發(fā)SpringBoot參數(shù)校驗(yàn)過程示例教程

    這篇文章主要為大家介紹了SpringBoot如何進(jìn)行參數(shù)校驗(yàn)的過程示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Java實(shí)現(xiàn)2048小游戲(可直接運(yùn)行)

    Java實(shí)現(xiàn)2048小游戲(可直接運(yùn)行)

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)2048小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • java泛型基本知識(shí)及通用方法

    java泛型基本知識(shí)及通用方法

    這篇文章主要介紹了java泛型基礎(chǔ)知識(shí)及通用方法,從以下幾個(gè)方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2019-04-04
  • Spring實(shí)戰(zhàn)之獲取其他Bean的屬性值操作示例

    Spring實(shí)戰(zhàn)之獲取其他Bean的屬性值操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之獲取其他Bean的屬性值操作,結(jié)合實(shí)例形式分析了Spring操作Bean屬性值的相關(guān)配置與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • Java開發(fā)者不能忽略的11種return寫法

    Java開發(fā)者不能忽略的11種return寫法

    今天,我們不講設(shè)計(jì)模式、不談八股文,結(jié)合實(shí)際項(xiàng)目踩坑經(jīng)歷,帶你從?11?個(gè)高頻場(chǎng)景,拆解?return?的優(yōu)雅用法與隱藏陷阱,希望對(duì)大家有所幫助
    2025-08-08
  • Java基礎(chǔ)學(xué)習(xí)之關(guān)鍵字和變量數(shù)據(jù)類型的那些事

    Java基礎(chǔ)學(xué)習(xí)之關(guān)鍵字和變量數(shù)據(jù)類型的那些事

    變量就是系統(tǒng)為程序分配的一塊內(nèi)存單元,用來存儲(chǔ)各種類型的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)學(xué)習(xí)之關(guān)鍵字和變量數(shù)據(jù)類型的那些事,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 如何實(shí)現(xiàn)bean初始化摧毀方法的注入

    如何實(shí)現(xiàn)bean初始化摧毀方法的注入

    這篇文章主要為大家介紹了如何實(shí)現(xiàn)bean初始化摧毀方法的注入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • struts1實(shí)現(xiàn)簡(jiǎn)單的登錄功能實(shí)例(附源碼)

    struts1實(shí)現(xiàn)簡(jiǎn)單的登錄功能實(shí)例(附源碼)

    本篇文章主要介紹了struts1實(shí)現(xiàn)簡(jiǎn)單的登錄功能實(shí)例(附源碼),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04

最新評(píng)論

于田县| 浦县| 那坡县| 阿坝县| 梨树县| 将乐县| 故城县| 安塞县| 遂川县| 溧水县| 赤峰市| 平安县| 博白县| 清苑县| 西林县| 迁西县| 赤水市| 白山市| 高密市| 庆安县| 临澧县| 宕昌县| 神农架林区| 巍山| 九龙坡区| 铁岭市| 余江县| 射洪县| 禹城市| 韶关市| 沧州市| 卓资县| 建平县| 克东县| 瓦房店市| 福鼎市| 安丘市| 江陵县| 六盘水市| 永平县| 沾益县|