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

Java中Integer.equals的用法與特殊情況

 更新時間:2025年07月14日 10:08:53   作者:清河大善人  
Java中Integer.equals比較數(shù)值而非對象地址,自動裝箱處理int參數(shù),-128~127范圍內(nèi)使用==安全,超出范圍或null需用Objects.equals,compareTo用于大小比較,equals僅判斷相等性,注意類型不匹配會導(dǎo)致false

在 Java 中,Integer.equalsInteger 類的一個方法,用于比較兩個 Integer 對象的值是否相等。雖然它看起來很簡單,但在某些情況下可能會出現(xiàn)意想不到的行為。

本文將深入剖析 Integer.equals 的工作原理,并探討可能出現(xiàn)的特殊情況。

1.Integer.equals的基本規(guī)則

Integer 繼承自 Number 類,并重寫了 equals 方法,源碼如下:

@Override
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return this.intValue() == ((Integer) obj).intValue();
    }
    return false;
}

規(guī)則解析:

  • 首先檢查 obj 是否是 Integer 實(shí)例,如果不是,直接返回 false。
  • 如果是 Integer,則比較其 int 值(intValue())。

示例:

Integer a = 1000;
Integer b = 1000;
System.out.println(a.equals(b)); // true,因?yàn)?1000 == 1000

盡管 ab 可能是不同的對象(因?yàn)?1000 超出了 Java 緩存范圍),但 equals 只比較 ,所以返回 true

2.Integer.equals(int)的裝箱問題

Integer.equals 方法中,參數(shù) Object obj 可能是 自動裝箱 過來的 Integer,也可能是直接傳入的 int

Java 提供了 自動裝箱(Autoboxing) 機(jī)制,會將基本類型 int 轉(zhuǎn)換成 Integer。

示例:

Integer a = 1000;
System.out.println(a.equals(1000)); // true

發(fā)生了什么?

  • 1000int,但 equals(Object obj) 需要 Object,所以 1000 先被 自動裝箱Integer.valueOf(1000)。
  • a.equals(Integer.valueOf(1000)),進(jìn)入 equals 方法后,objInteger 實(shí)例,因此比較 intValue(),返回 true。

特殊情況:

Integer a = 1000;
System.out.println(a.equals(1000.0)); // false
  • 1000.0double,不會被裝箱為 Integer,obj instanceof Integer 返回 false,所以 equals 直接返回 false。

3.==vsequals()

示例:

Integer x = 100;
Integer y = 100;
System.out.println(x == y); // true
System.out.println(x.equals(y)); // true

Integer a = 1000;
Integer b = 1000;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true

為什么100和1000處理不同?

  • Java 對 -128 ~ 127 之間的 Integer 進(jìn)行了緩存(Integer Cache),相同數(shù)值的 Integer 會共享同一個對象,== 也成立。
  • 超過 127 的數(shù)值 不在緩存范圍內(nèi),Integer.valueOf(1000) 會創(chuàng)建新對象,所以 == 比較的是不同的對象地址,返回 false。

如何正確判斷 Integer 相等?

  • ? 推薦使用 equals,避免緩存帶來的困惑
Integer a = 1000;
Integer b = 1000;
System.out.println(a.equals(b)); // true(比較的是值)
  • ? 不要直接用 ==,可能會出問題:
Integer a = 1000;
Integer b = 1000;
System.out.println(a == b); // false(因?yàn)槭遣煌膶ο螅?

4.null處理

示例:

Integer a = null;
System.out.println(a.equals(1000)); // 運(yùn)行時報錯:NullPointerException

如果 anull,那么調(diào)用 a.equals() 時會發(fā)生 NullPointerException。

因此,在比較 Integer 時,建議使用 Objects.equals() 來防止空指針異常:

Integer a = null;
System.out.println(Objects.equals(a, 1000)); // false,不會報錯

Objects.equals(a, b) 的實(shí)現(xiàn)相當(dāng)于:

(a == b) || (a != null && a.equals(b))

這樣就能避免 null.equals() 造成的異常。

5.equals()與compareTo()的區(qū)別

Integer 中,compareTo() 也是一個常見的比較方法:

Integer a = 1000;
Integer b = 2000;
System.out.println(a.compareTo(b)); // -1(1000 小于 2000)
System.out.println(b.compareTo(a)); // 1(2000 大于 1000)
System.out.println(a.compareTo(1000)); // 0(相等)

區(qū)別:

equals() 只返回 true/false,用于判斷 相等性。

compareTo() 返回:

  • 負(fù)數(shù)this < other
  • 0this == other
  • 正數(shù)this > other

6. 總結(jié)

情況代碼示例結(jié)果原因
equals() 比較兩個 Integernew Integer(1000).equals(new Integer(1000))? true比較的是數(shù)值
equals() 直接比較 intInteger.valueOf(1000).equals(1000)? true1000 先裝箱為 Integer(1000),再比較值
equals() 與 DoubleInteger.valueOf(1000).equals(1000.0)? false1000.0 是 Double,equals() 只支持 Integer
== 比較 Integer(緩存范圍內(nèi))Integer x = 100; Integer y = 100; x == y? true-128 ~ 127 之間 Integer 復(fù)用同一對象
== 比較 Integer(超出緩存范圍)Integer a = 1000; Integer b = 1000; a == b? false1000 超出緩存范圍,創(chuàng)建的是兩個對象
null.equals()Integer a = null; a.equals(1000);? 拋異常a 為 null,調(diào)用 equals() 報 NullPointerException
Objects.equals()Objects.equals(null, 1000);? false避免 null 異常

Integer.equals(Object obj) 只比較值,不管對象地址。

Integer-128 ~ 127 之間的值會被緩存,超出范圍的 Integer 不能用 == 比較。

如果 Integer 可能為 null,用 Objects.equals(a, b) 避免空指針異常。

Integer.equals(Double) 直接返回 false,不會自動轉(zhuǎn)換類型。

compareTo() 適用于大小比較,而 equals() 只判斷相等性。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java偽泛型知識點(diǎn)詳解

    java偽泛型知識點(diǎn)詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java偽泛型知識點(diǎn)詳解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-06-06
  • Java17中record替代Lombok部分功能使用場景探究

    Java17中record替代Lombok部分功能使用場景探究

    這篇文章主要介紹了使用Java17中的record替代Lombok的部分功能,本文來為大家小小的總結(jié)下,我們可以在哪些地方,利用record來替換Lombok
    2024-01-01
  • 使用SSE流式輸出實(shí)戰(zhàn)記錄(Javaweb前后端)

    使用SSE流式輸出實(shí)戰(zhàn)記錄(Javaweb前后端)

    這篇文章主要介紹了使用SSE流式輸出(Javaweb前后端)的相關(guān)資料,SSE是一種允許服務(wù)器向客戶端推送實(shí)時數(shù)據(jù)的技術(shù),適用于聊天應(yīng)用、實(shí)時數(shù)據(jù)監(jiān)控等場景,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-05-05
  • 詳解IDEA 啟動tomcat 端口占用原因以及解決方法( 使用debug模式)

    詳解IDEA 啟動tomcat 端口占用原因以及解決方法( 使用debug模式)

    這篇文章主要介紹了詳解IDEA 啟動tomcat 端口占用原因以及解決方法( 使用debug模式) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Spring boot工具類靜態(tài)屬性注入及多環(huán)境配置詳解

    Spring boot工具類靜態(tài)屬性注入及多環(huán)境配置詳解

    這篇文章主要為大家詳細(xì)介紹了Spring boot工具類靜態(tài)屬性注入,及多環(huán)境配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Java快速實(shí)現(xiàn)Word轉(zhuǎn)圖片功能的多種方法與實(shí)踐

    Java快速實(shí)現(xiàn)Word轉(zhuǎn)圖片功能的多種方法與實(shí)踐

    在軟件開發(fā)中,轉(zhuǎn)換文件格式是一個常見需求,尤其是將Word文件轉(zhuǎn)換為圖片格式,這在報表生成、文檔預(yù)覽、自動化處理等場景中非常有用,在 Java 中實(shí)現(xiàn)Word轉(zhuǎn)圖片的功能有多種思路,以下將介紹幾種常見的實(shí)現(xiàn)方式,并探討它們的優(yōu)缺點(diǎn),需要的朋友可以參考下
    2025-08-08
  • 解決mybatis-plus新增數(shù)據(jù)自增ID變無序問題

    解決mybatis-plus新增數(shù)據(jù)自增ID變無序問題

    這篇文章主要介紹了解決mybatis-plus新增數(shù)據(jù)自增ID變無序問題,具有很好的參考價值,希望對大家有所幫助。
    2023-07-07
  • Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(借助Array?List)

    Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(借助Array?List)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),借助Array?List,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • SpringBoot2 實(shí)現(xiàn)JPA分頁和排序分頁的案例

    SpringBoot2 實(shí)現(xiàn)JPA分頁和排序分頁的案例

    這篇文章主要介紹了SpringBoot2 實(shí)現(xiàn)JPA分頁和排序分頁的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Spring超詳細(xì)講解事務(wù)

    Spring超詳細(xì)講解事務(wù)

    Spring事務(wù)的本質(zhì)就是對數(shù)據(jù)庫事務(wù)的支持,沒有數(shù)據(jù)庫事務(wù),Spring是無法提供事務(wù)功能的。Spring只提供統(tǒng)一的事務(wù)管理接口,具體實(shí)現(xiàn)都是由數(shù)據(jù)庫自己實(shí)現(xiàn)的,Spring會在事務(wù)開始時,根據(jù)當(dāng)前設(shè)置的隔離級別,調(diào)整數(shù)據(jù)庫的隔離級別,由此保持一致
    2022-07-07

最新評論

阳山县| 嘉兴市| 武强县| 五原县| 通州区| 泰安市| 保康县| 甘谷县| 通海县| 江安县| 崇州市| 吴江市| 普兰店市| 云林县| 崇信县| 株洲市| 阜新市| 体育| 庆阳市| 安达市| 焉耆| 博白县| 三穗县| 新乡市| 延吉市| 合山市| 黔西| 凤山县| 富平县| 通化市| 蒙城县| 周口市| 汕头市| 阜南县| 墨脱县| 南通市| 壶关县| 遵化市| 宁化县| 辽阳市| 本溪|