==一般用於比較記憶體位址,equals()用於比較object的值,注意int用equals()是會報錯的。
integer i=1
integer k=1
i.equals(k)=true
i==k=true
i.intvalue()==k.intvalue()=true
integer l=129
integer p=129
l.equals(p)=true
l==p=false
l.intvalue()==p.intvalue()=true
綜上所屬integer在棧中的值-128到127是成立的
int o=197
int y=197
o==y=true
integer a=197
integer b=197
a==b=false
同樣值是197,但是integer是重新new了物件的,所以a==b=false。
而int則是將兩個相同的值指向了乙個位址o==y=true。
o==b=true
這是我們很多人**沒有出錯的原因之一,比如從資料庫查出的id用==判斷而沒出錯。
Integer 與int 賦值比較
測試 test public void integertest 執行結果 true true false true 斷點除錯分析結果 i01是引用型別,如圖引用的位址為integer 651 i02是值型別 i03是引用型別,因為引用型別值放在堆裡面,如果堆裡有值,i03這種取值方式就直接引用原有值...
Integer 與int 賦值比較
測試 test public void integertest 執行結果 true true false true 斷點除錯分析結果 i01是引用型別,如圖引用的位址為integer 651 i02是值型別 i03是引用型別,因為引用型別值放在堆裡面,如果堆裡有值,i03這種取值方式就直接引用原有值...
Integer 與int 賦值比較
測試 test public void integertest 執行結果 true true false true 斷點除錯分析結果 i01是引用型別,如圖引用的位址為integer 651 i02是值型別 i03是引用型別,因為引用型別值放在堆裡面,如果堆裡有值,i03這種取值方式就直接引用原有值...