用以下**做測試
1得出的結論是 integer 型別的值在[-128,127] 期間,integer 用 「==」是可以的。為什麼會出現這個情況呢,實際上在我們用integer a = 數字;來賦值的時候integer這個類是呼叫的public static integer valueof(int i)這個方法。@test
2public
void
testinteger()
我們來看看valueof(int i)的**,可以發現他對傳入引數i做了乙個if判斷。在-128<=i<=127的時候是直接用的int原始資料型別,而超出了這個範圍則是new了乙個物件。我們知道"=="符號在比較物件的時候是比較的記憶體位址,而對於原始資料型別是直接比對的資料值。那麼這個問題就解決了。
還有一點需要注意到 是 integer e = 128; int e1 = 128; e == e1:true 而 integer b = 128; integer b1 = 128; b==b1:false ,e=128 已經大於127了,所以e 是乙個物件(new 出來的) 為什麼e = e1 是ture , 因為 int為值型別,引用型別integer與值型別int比較顯然比較的是值因為int在堆中是不開闢記憶體的,他在棧中的值則為他本身的值所以e==e1比較的是他們各自的value, e==e1為true
總結:integer 型別的值在[-128,127] 期間,integer 用 「==」是可以的 , integer 與 int 型別比較(==)比較的是值。
Integer型別值相等或不等分析
兩個integer變數,定義為integer a integer b 如果 integer a 123,integer b 123,可以返回true 但如果integer a 12345,integer b 12345,返回false 看下integer的原始碼 public static inte...
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...