Weird Java Integer Boxing
Java's integer boxing機制會讓你感到一絲困惑,尤其是當比較引用相等性時。
問題
考慮以下程式碼片段:
public class Scratch { public static void main(String[] args) { Integer a = 1000, b = 1000; System.out.println(a == b); // false Integer c = 100, d = 100; System.out.println(c == d); // true } }
運作後會產生:
false true
第一行結果是預期的,因為a 和b 是不同的物件。但第二行結果是為什麼?
回答
第二行的 true 結果是由語言規範保證的。根據第5.1.7 節:
如果要裝箱的值p 為true、false、範圍在u0000 到u007f 的byte 或char,或者介於-128 和127 之間的int 或short,那麼任何兩次對p 的裝箱轉換的結果r1 和r2 總是相等的。
儘管第二行輸出是保證的,但第一行卻不是(見下面引用的最後一段):
理想情況下,給定一個原始值p 的裝箱總是會產生相同的參考。在實踐中,使用現有的實現技術可能無法做到這一點。上述規則是務實的折衷方案。上面的最後一條條款要求對某些常見值始終裝箱成無法區分的物件。實作可以對其進行緩存,無論是以延遲方式還是立即方式。
對於其他值,這個表述不允許程式設計師對裝箱值的標識做出任何假設。這允許(但不強制)共享其中的一些或所有引用。
這確保了在大多數常見情況下,行為將是期望的行為,而不會對性能造成不必要的損失,特別是在小型設備上。記憶體限制較少的實作可以快取所有字元和短整型,以及範圍在 -32K 到 32K 之間的整數和長整型。
以上是為什麼 Java 的整數裝箱對於「Integer == Integer」比較產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。