欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中int與Integer的區(qū)別詳解及常見問題解決

 更新時間:2025年07月05日 09:52:56   作者:十六點五  
在Java編程語言中int和Integer雖然都用于表示數(shù)值,但它們之間存在著顯著的區(qū)別,這篇文章主要介紹了Java中int與Integer的區(qū)別詳解及常見問題的相關(guān)資料,需要的朋友可以參考下

1. 本質(zhì)與存儲方式

特性intInteger
類型基本數(shù)據(jù)類型(Primitive Type)引用類型(包裝類,Object 的子類)
存儲位置棧內(nèi)存(Stack)堆內(nèi)存(Heap)
內(nèi)存占用4 字節(jié)(固定)對象頭 + 4 字節(jié)值 ≈ 16-24 字節(jié)

示例

 int a = 10;                 // 棧中直接存儲值 10
 Integer b = Integer.valueOf(10); // 堆中存儲對象,變量 b 存儲對象引用

2. 默認(rèn)值

場景intInteger
未初始化值0null
集合存儲無法直接存入集合(需自動裝箱為 Integer可直接存入集合(如 List<Integer>

示例

 int num1;                    // 默認(rèn)值為 0
 Integer num2;                // 默認(rèn)值為 null(可能引發(fā) NullPointerException)
 List<Integer> list = new ArrayList<>();
 list.add(10);               // 自動裝箱:int → Integer

3. 功能與方法

能力intInteger
方法支持無方法,僅存儲值提供數(shù)值轉(zhuǎn)換、比較等工具方法(如 parseInt()、compareTo()
空值處理不能為 null可為 null(需注意空指針)
泛型支持無法直接用于泛型支持泛型(如 List<Integer>

示例

 int num = Integer.parseInt("123");     // String → int
 Integer value = Integer.valueOf("456");// String → Integer
 int max = Integer.MAX_VALUE;           // 獲取 int 最大值

4. 自動裝箱與拆箱

  • 自動裝箱(Autoboxing):Java 編譯器自動將 int 轉(zhuǎn)換為 Integer

  • 自動拆箱(Unboxing):自動將 Integer 轉(zhuǎn)換為 int。

示例

 Integer a = 10;     // 自動裝箱:等價于 Integer.valueOf(10)
 int b = a;          // 自動拆箱:等價于 a.intValue()

性能注意: 自動裝箱/拆箱會帶來額外開銷,高頻操作時建議直接使用 int。

5. 比較操作

比較方式intInteger
== 比較直接比較值是否相等比較對象引用地址(除非值在緩存范圍內(nèi))
equals()不適用(基本類型無方法)比較值是否相等

示例

 int x1 = 1000;
 int x2 = 1000;
 System.out.println(x1 == x2); // true(值相等)
 ?
 Integer y1 = 1000;
 Integer y2 = 1000;
 System.out.println(y1 == y2); // false(對象地址不同)
 System.out.println(y1.equals(y2)); // true(值相等)
 ?
 // 緩存范圍測試(-128~127)
 Integer z1 = 127;
 Integer z2 = 127;
 System.out.println(z1 == z2); // true(復(fù)用緩存對象)

6. 緩存機制(IntegerCache)

  • 緩存范圍Integer 類默認(rèn)緩存 -128127 之間的值。

  • 目的:減少頻繁創(chuàng)建小數(shù)值對象,優(yōu)化內(nèi)存和性能。

  • 擴展緩存:可通過 JVM 參數(shù) -XX:AutoBoxCacheMax=<size> 調(diào)整上限。

示例

 Integer a = 127;    // 從緩存獲取
 Integer b = 127;    // 復(fù)用緩存對象
 System.out.println(a == b); // true
 ?
 Integer c = 128;    // 超出緩存范圍,新建對象
 Integer d = 128;    // 新建另一個對象
 System.out.println(c == d); // false

7. 使用場景

場景推薦使用原因
高頻計算int避免自動裝箱開銷,性能更優(yōu)
集合存儲Integer集合泛型不支持基本類型(如 List<int> 非法)
數(shù)據(jù)庫映射Integer數(shù)據(jù)庫字段可能為 NULL,int 無法表示
API 設(shè)計Integer方法參數(shù)或返回值可能需區(qū)分“無值”(null)

8. 常見問題與陷阱

(1) NullPointerException

 Integer value = null;
 int num = value; // 運行時拋出 NullPointerException(自動拆箱調(diào)用 intValue())

(2) 性能損耗

 // 高頻循環(huán)中自動裝箱導(dǎo)致性能下降
 long sum = 0;
 for (Integer i = 0; i < 100000; i++) { // 每次循環(huán)觸發(fā)裝箱
     sum += i;
 }

(3) 比較錯誤

 Integer a = 200;
 Integer b = 200;
 if (a == b) { // false,應(yīng)使用 equals() 或 intValue() 比較
     System.out.println("Equal");
 }

總結(jié)

維度intInteger
類型基本數(shù)據(jù)類型包裝類(引用類型)
內(nèi)存棧存儲,高效堆存儲,有對象開銷
空值不支持支持(需防空指針)
方法提供工具方法
適用場景高頻計算、性能敏感場景集合、數(shù)據(jù)庫映射、API 設(shè)計

選擇建議

  • 優(yōu)先使用 int:在不需要對象特性(如 null 值、方法操作)時,提升性能。

  • 必須使用 Integer:在泛型集合、數(shù)據(jù)庫映射或需要區(qū)分“無值”場景時。

到此這篇關(guān)于Java中int與Integer的區(qū)別詳解及常見問題解決的文章就介紹到這了,更多相關(guān)Java中int與Integer區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    本文主要介紹了SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 教你用Java驗證服務(wù)器登錄系統(tǒng)

    教你用Java驗證服務(wù)器登錄系統(tǒng)

    這篇文章主要介紹了教你用Java驗證服務(wù)器登錄系統(tǒng),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java計時器StopWatch實現(xiàn)方法代碼實例

    Java計時器StopWatch實現(xiàn)方法代碼實例

    這篇文章主要介紹了Java計時器StopWatch實現(xiàn)方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot基于HttpMessageConverter實現(xiàn)全局日期格式化

    SpringBoot基于HttpMessageConverter實現(xiàn)全局日期格式化

    這篇文章主要介紹了SpringBoot基于HttpMessageConverter實現(xiàn)全局日期格式化,使用Jackson消息轉(zhuǎn)換器,非常具有實用價值,需要的朋友可以參考下
    2018-12-12
  • spring aop之@AfterReturning不生效問題及解決

    spring aop之@AfterReturning不生效問題及解決

    這篇文章主要介紹了spring aop之@AfterReturning不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring Boot實現(xiàn)模塊化的幾種方法

    Spring Boot實現(xiàn)模塊化的幾種方法

    模塊可以是業(yè)務(wù)模塊,為應(yīng)用程序提供一些業(yè)務(wù)服務(wù),或者為幾個其他模塊或整個應(yīng)用程序提供跨領(lǐng)域關(guān)注的技術(shù)模塊。這篇文章主要介紹了Spring Boot實現(xiàn)模塊化,需要的朋友可以參考下
    2018-07-07
  • 基于Java代碼實現(xiàn)數(shù)字在數(shù)組中出現(xiàn)次數(shù)超過一半

    基于Java代碼實現(xiàn)數(shù)字在數(shù)組中出現(xiàn)次數(shù)超過一半

    這篇文章主要介紹了基于Java代碼實現(xiàn)數(shù)字在數(shù)組中出現(xiàn)次數(shù)超過一半的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置

    SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置

    這篇文章主要介紹了SpringBoot+JavaMailSender實現(xiàn)騰訊企業(yè)郵箱配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 關(guān)于mybatis-plus邏輯刪除自動填充更新時間的問題

    關(guān)于mybatis-plus邏輯刪除自動填充更新時間的問題

    mybatis-plus是對mybatis的增強,mybatis-plus更像是面向?qū)ο缶幊蹋瑪?shù)據(jù)庫基本CRUD的操作可以不用手動編寫SQL語句,大大提高了開發(fā)的效率,這篇文章主要介紹了mybatis-plus邏輯刪除自動填充更新時間問題,需要的朋友可以參考下
    2022-07-07
  • 基于mybatis-plus QueryWrapper 排序的坑

    基于mybatis-plus QueryWrapper 排序的坑

    這篇文章主要介紹了mybatis-plus QueryWrapper 排序的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論