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

Java中包裝類(lèi)的緩存機(jī)制詳細(xì)講解

 更新時(shí)間:2025年12月22日 09:42:16   作者:kitirose  
Java中的包裝類(lèi)緩存機(jī)制是指在Java?5中引入的一個(gè)功能,該功能可以幫助節(jié)省內(nèi)存、提高性能,這篇文章主要介紹了Java中包裝類(lèi)緩存機(jī)制的相關(guān)資料,文中通過(guò)代碼介紹地方非常詳細(xì),需要的朋友可以參考下

Java中包裝類(lèi)的緩存機(jī)制是為了提升性能、減少重復(fù)對(duì)象創(chuàng)建,其中以Integer的緩存最為典型。下面分三部分詳細(xì)講解:

一、Integer的緩存機(jī)制(重點(diǎn))

Integer的緩存機(jī)制由IntegerCache內(nèi)部類(lèi)實(shí)現(xiàn),核心邏輯是:預(yù)先創(chuàng)建并緩存一定范圍的Integer對(duì)象,當(dāng)需要使用該范圍的整數(shù)時(shí),直接返回緩存中的實(shí)例,而非新創(chuàng)建對(duì)象。

1. 緩存范圍

默認(rèn)情況下,緩存范圍是 -128 ~ 127(Java規(guī)范強(qiáng)制要求)。

  • 這個(gè)范圍是最常用的整數(shù)區(qū)間(如年齡、索引等),緩存后可大幅減少對(duì)象創(chuàng)建開(kāi)銷(xiāo)。
  • 可以通過(guò)JVM參數(shù)XX:AutoBoxCacheMax=<size>調(diào)整上限(僅對(duì)127以上有效,下限-128固定),但不推薦(破壞規(guī)范一致性)。

2. 觸發(fā)場(chǎng)景

緩存僅在自動(dòng)裝箱(基本類(lèi)型→包裝類(lèi))或調(diào)用Integer.valueOf(int) 時(shí)生效,直接new Integer(int)會(huì)強(qiáng)制創(chuàng)建新對(duì)象(不使用緩存)。

代碼示例

public class IntegerCacheDemo {
    public static void main(String[] args) {
        // 自動(dòng)裝箱(觸發(fā)緩存)
        Integer a = 127;
        Integer b = 127;
        System.out.println(a == b); // true(同一緩存對(duì)象)

        // 超過(guò)緩存范圍
        Integer c = 128;
        Integer d = 128;
        System.out.println(c == d); // false(新對(duì)象)

        // 顯式調(diào)用valueOf(觸發(fā)緩存)
        Integer e = Integer.valueOf(127);
        Integer f = Integer.valueOf(127);
        System.out.println(e == f); // true

        // new關(guān)鍵字(不觸發(fā)緩存,強(qiáng)制新建)
        Integer g = new Integer(127);
        Integer h = new Integer(127);
        System.out.println(g == h); // false(不同對(duì)象)
    }
}

二、其他基本類(lèi)型包裝類(lèi)的緩存機(jī)制

Integer外,部分包裝類(lèi)也有緩存機(jī)制,但范圍和實(shí)現(xiàn)略有不同,總結(jié)如下:

包裝類(lèi)緩存范圍說(shuō)明
Byte-128 ~ 127全部緩存(因Byte取值范圍僅為-128~127)
Short-128 ~ 127固定范圍,不可調(diào)整
Long-128 ~ 127固定范圍,不可調(diào)整
Character0 ~ 127對(duì)應(yīng)ASCII字符(常用字符)
Booleantruefalse僅緩存兩個(gè)靜態(tài)實(shí)例(Boolean.TRUE/FALSE
Float無(wú)緩存浮點(diǎn)型取值范圍太廣,緩存無(wú)意義
Double無(wú)緩存同上

代碼示例(其他包裝類(lèi))

// Byte緩存(全部范圍)
Byte b1 = 127;
Byte b2 = 127;
System.out.println(b1 == b2); // true(緩存)

// Character緩存(0~127)
Character c1 = 'a'; // ASCII碼97,在緩存范圍
Character c2 = 'a';
System.out.println(c1 == c2); // true

Character c3 = '中'; // Unicode碼20013,超出緩存
Character c4 = '中';
System.out.println(c3 == c4); // false

// Boolean緩存
Boolean bool1 = true;
Boolean bool2 = true;
System.out.println(bool1 == bool2); // true(同一實(shí)例)

三、包裝類(lèi) vs 基本數(shù)據(jù)類(lèi)型:使用場(chǎng)景對(duì)比

選擇的核心依據(jù)是:是否需要“對(duì)象特性”或“null值”。

1. 優(yōu)先用基本數(shù)據(jù)類(lèi)型的場(chǎng)景

  • 局部變量/方法參數(shù):用于臨時(shí)計(jì)算(如循環(huán)計(jì)數(shù)、數(shù)值運(yùn)算),存儲(chǔ)在棧內(nèi)存,訪問(wèn)速度快,無(wú)額外對(duì)象開(kāi)銷(xiāo)。
  • 性能敏感場(chǎng)景:如高頻次計(jì)算、大數(shù)據(jù)量處理(避免自動(dòng)裝箱/拆箱的性能損耗)。
  • 明確不需要null值:基本類(lèi)型不能為null,可避免NullPointerException(如年齡、分?jǐn)?shù)等必然有值的場(chǎng)景)。

示例

// 局部變量用基本類(lèi)型(高效)
int count = 0;
for (int i = 0; i < 1000; i++) {
    count += i; // 基本類(lèi)型運(yùn)算效率高
}

2. 必須用包裝類(lèi)的場(chǎng)景

  • 集合框架:集合(如ArrayListHashMap)只能存儲(chǔ)對(duì)象,不能直接存基本類(lèi)型(需用包裝類(lèi))。 示例:List<Integer> list = new ArrayList<>();(不能寫(xiě)List<int>)。
  • 泛型:泛型參數(shù)必須是對(duì)象類(lèi)型(如class MyClass<T>,T不能是int,只能是Integer)。
  • 需要表示“無(wú)值”狀態(tài):如數(shù)據(jù)庫(kù)查詢(xún)結(jié)果可能為null(用Integernull表示“未查詢(xún)到”,而int無(wú)法表示)。
  • 反射/序列化:反射中方法參數(shù)、字段類(lèi)型需用包裝類(lèi)(如Field.getType()返回包裝類(lèi)類(lèi)型);序列化時(shí)對(duì)象才能被傳輸。
  • 工具類(lèi)方法參數(shù):如Integer.parseInt(String)Objects.equals()等,需傳入包裝類(lèi)或依賴(lài)對(duì)象方法。

3. 注意事項(xiàng)

  • 自動(dòng)裝箱/拆箱的坑:頻繁裝箱拆箱會(huì)產(chǎn)生額外對(duì)象(如List<Integer>中添加int會(huì)自動(dòng)裝箱),可能導(dǎo)致性能問(wèn)題(可考慮Trove等專(zhuān)門(mén)的基本類(lèi)型集合庫(kù)優(yōu)化)。
  • ==與equals:包裝類(lèi)用==比較的是對(duì)象地址(緩存范圍內(nèi)除外),必須用equals比較值;基本類(lèi)型直接用==比較值。 示例:Integer a=128; Integer b=128; a.equals(b) → true,但a==b → false。

總結(jié)

  • 緩存機(jī)制是包裝類(lèi)的優(yōu)化手段,僅Byte/Short/Long/Character/Integer/Boolean有緩存,范圍各有不同。
  • 基本類(lèi)型適合簡(jiǎn)單計(jì)算、局部變量(高效、無(wú)null風(fēng)險(xiǎn));包裝類(lèi)適合集合、泛型、需null值的場(chǎng)景(依賴(lài)對(duì)象特性)。

實(shí)際開(kāi)發(fā)中,根據(jù)是否需要“對(duì)象特性”或“null值”選擇即可,避免過(guò)度使用包裝類(lèi)導(dǎo)致性能損耗。

到此這篇關(guān)于Java中包裝類(lèi)的緩存機(jī)制詳細(xì)講解的文章就介紹到這了,更多相關(guān)Java包裝類(lèi)緩存機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Jmeter接口測(cè)試實(shí)戰(zhàn)-Cookies

    關(guān)于Jmeter接口測(cè)試實(shí)戰(zhàn)-Cookies

    這篇文章主要介紹了關(guān)于Jmeter接口測(cè)試實(shí)戰(zhàn)-Cookies問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java實(shí)現(xiàn)日志文件關(guān)鍵詞搜索方式

    Java實(shí)現(xiàn)日志文件關(guān)鍵詞搜索方式

    Java代碼用于搜索指定目錄下的日志文件,按時(shí)間排序并輸出包含關(guān)鍵詞的內(nèi)容,處理大數(shù)據(jù)量時(shí),控制臺(tái)輸出不完整,需調(diào)整IDE console設(shè)置以擴(kuò)展緩沖區(qū)
    2025-09-09
  • MyBatis框架迭代器模式實(shí)現(xiàn)原理解析

    MyBatis框架迭代器模式實(shí)現(xiàn)原理解析

    這篇文章主要介紹了MyBatis框架迭代器模式實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Maven安裝、配置、Idea配置maven全過(guò)程

    Maven安裝、配置、Idea配置maven全過(guò)程

    這篇文章主要介紹了Maven安裝、配置、Idea配置maven全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-05-05
  • Spring 中的循環(huán)引用問(wèn)題解決方法

    Spring 中的循環(huán)引用問(wèn)題解決方法

    這篇文章主要介紹了Spring 中的循環(huán)引用問(wèn)題解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-04-04
  • Java IO流 文件的編碼實(shí)例代碼

    Java IO流 文件的編碼實(shí)例代碼

    本文通過(guò)實(shí)例代碼給大家介紹了java io流文件編碼的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-05-05
  • Java深入分析動(dòng)態(tài)代理

    Java深入分析動(dòng)態(tài)代理

    動(dòng)態(tài)代理指的是,代理類(lèi)和目標(biāo)類(lèi)的關(guān)系在程序運(yùn)行的時(shí)候確定的,客戶通過(guò)代理類(lèi)來(lái)調(diào)用目標(biāo)對(duì)象的方法,是在程序運(yùn)行時(shí)根據(jù)需要?jiǎng)討B(tài)的創(chuàng)建目標(biāo)類(lèi)的代理對(duì)象。本文將通過(guò)案例詳細(xì)講解一下Java動(dòng)態(tài)代理的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-07-07
  • spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)的方法(反向代理、轉(zhuǎn)發(fā))

    spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)的方法(反向代理、轉(zhuǎn)發(fā))

    這篇文章主要介紹了spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)(反向代理、轉(zhuǎn)發(fā))的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • idea不使用maven如何將項(xiàng)目打包

    idea不使用maven如何將項(xiàng)目打包

    使用IDEA 2021版本,不借助Maven進(jìn)行打WAR包的步驟是:首先點(diǎn)擊Project Structure,然后點(diǎn)擊Artifacts,接著選擇需要的打包類(lèi)型,設(shè)置好包的名稱(chēng),最后進(jìn)行打包,這種方法適用于不使用Maven進(jìn)行項(xiàng)目管理的情況
    2024-09-09
  • 在SpringBoot里自定義Spring MVC配置的三種方法

    在SpringBoot里自定義Spring MVC配置的三種方法

    SpringBoot幫我們自動(dòng)配好了 MVC 的核心組件,但實(shí)際開(kāi)發(fā)中,光用默認(rèn)配置肯定不夠今天就教你 3 種自定義 Spring MVC 配置的方法,從簡(jiǎn)單到復(fù)雜,新手也能一步步跟著做,需要的朋友可以參考下
    2026-03-03

最新評(píng)論

南溪县| 普定县| 察雅县| 藁城市| 翁牛特旗| 唐河县| 莱西市| 万年县| 祁门县| 印江| 壶关县| 阿瓦提县| 黑水县| 利辛县| 萝北县| 通河县| 同心县| 大港区| 特克斯县| 长宁县| 泰顺县| 大连市| 呼玛县| 鹿泉市| 嘉鱼县| 河津市| 云梦县| 天祝| 大关县| 木兰县| 崇阳县| 北川| 鄂州市| 奉贤区| 凌云县| 游戏| 安吉县| 南充市| 中西区| 平阴县| 永福县|