Integer值判斷是否相等問題

2021-09-11 15:11:17 字數 694 閱讀 1048

昨天在開發中遇到乙個問題,定義了兩個integer變數,暫且定義為integer a;  integer b;

這兩個值由前端賦值並傳到後台,前台傳的是a = 12345, b = 12345,  但我在後台比較的時候 if (a == b),卻返回false,好無語啊,不都是123嗎?為什麼返回false,後來改為equals(),返回true,但其中的有些端倪還不太清楚,現總結下:

我們知道integer是int的包裝類,在jdk1.5以上,可以實現自動裝箱拆箱,就是jdk裡面會自動幫我們轉換,不需要我們手動去強轉,所以我們經常在這兩種型別中隨意寫,平時也沒什麼注意

但integer他是物件,我們知道 == 比較的是堆中的位址,但有個奇怪的事是, 如果 integer a = 123, integer b = 123,可以返回true,但如果integer a = 12345, integer b = 12345,返回false,這就是jdk的東西,我們看下integer的原始碼

public static integer valueof(int i)

預設integercache.low 是-127,integer.high是128,如果在這個區間內,他就會把變數i當做乙個變數,放到記憶體中;但如果不在這個範圍內,就會去new乙個integer物件,

而我在**中,兩個integer值都不在這個範圍內,所以jdk幫我new了兩個例項,這樣在用==,肯定是false。

Integer值判斷是否相等問題

今天發現了乙個奇怪的問題 integer allrightstotal 140 integer allrightslasttotal 140 if allrightstotal allrightsinit 最後得出的結論是 對於integer值比較有範圍規定 integer 型別的值在 128,12...

Integer值判斷是否相等問題

在開發中遇到乙個問題,定義了兩個integer變數,暫且定義為integer a integer b 這兩個值由前端賦值並傳到後台,前台傳的是a 12345,b 12345,但我在後台比較的時候 if a b 卻返回false,後來改為equals 返回true。總結如下 我們知道integer是i...

判斷Integer值相等不能用

今天在開發中判斷兩個integer值相等,integer a 3 duixiang duixiang new duixiang duixiang dao.getduixiang integer b duixiang.getb system.out.print a b system.out.print...