Integer比較相等的問題

2021-09-10 09:21:32 字數 1359 閱讀 8339

記得是有一次查詢資料,資料封裝到實體類進行資料匹配的時候,出現了integer型別比較像等的問題,明明兩個數是一樣的,但是就是匹配不上。

乙個很簡陋的例子:

public static void main(string args)  else 

}

結果輸出:

明明是一樣的數,結果沒有匹配成功;

雖然integer不用建立物件就能賦值資料,但是它始終是乙個包裝類

點進integer的原始碼裡面就能看到

private static class integercache  catch( numberformatexception nfe) 

}high = h;

cache = new integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new integer(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >= 127;

}private integercache() {}

}

public static integer valueof(int i)
等等原始碼...

意思就是當integer的值為-128~127之間的值的時候,integer直接把這些值放進常量池裡面,這個時候,用 == 是可以比較的。

比如:

public static void main(string args)  else 

}

結果輸出:

但是當賦給integer值超過這個範圍的時候,integer就會建立物件,值就不放在常量池裡面了,這個時候再用 == 就不可以比較了,因為存放的位置都不一樣了,數一樣還是會返回false

所以integer的話強烈建議用 equals() 這個方法!

public static void main(string args)  else 

}

結果:

Integer比較是否相等問題

1.integer 與 integer 進行比較 2.integer 與 int 進行比較 第一種 integer 與 int進行比較 integer 與int進行比較,會自動比較 兩個的值是否相等,如同 int與int這種基本型別的比較一樣。第二種 integer 與 integer 進行比較 i...

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,好無語啊,不都是123嗎?為什麼返回false,後來改為equals...