(轉)Java中判斷兩個Long類型是否相等
在項目中將兩個long類型的值比較是否相等,結果卻遇到了疑問?
下面就陪大家看看一個神奇的現象!
1.1問題?為什么同樣的類型,同樣的值,卻不相等呢?
1.2那么我們就需要探索一下源碼了
源碼中顯示,Long中有一個靜態的內部類LongCache,專門用於緩存-128至127之間的值,一共256個元素。
如果值在[-128, 127]之間,會放在緩存里面,而超過這個范圍就要new一個新的對象,也就是說==不能判斷對象是否相等。當然,如果值是在[-128, 127]之間的話是測不出來什么問題的。
1.3解決方案!
可以使用.longValue() 或者..equals()進行比較。
1.4最佳解決方案為 .eques() 我們可以先看.eques()的源碼。
它是先通過.longValue()
方法獲取Long對象的基本類型long的值之后再做比較的。我們用longValue會比較容易忘記后面一個包裝類調longValue方法。
所以所我們最好用.eques()方法,當然也可以用.longValue()的!