項目裏遇到兩個Long類型的變量,要進行大小比較,很天然的使用==,結果兩個相同的值進行比較最後怎麼都是返回false。後來仔細思考了一下,發現一些問題緩存
1。兩個Long類型的變量進行==比較,既然是Long,就是對象,使用==比較就是在比較兩個對象內存地址是否相同,然而我要進行比較的是值,那麼這裏用==就不恰當對象
2。其次,Long a= 123456L這種狀況,右邊是基本類型long,若是要把它賦給Long對象,那麼虛擬機是進行了自動裝箱把基本類型包裝成對象類型的,使用的方法是valueOf,打開Long的valueOf方法一看,若是傳入的值大於-128小於127,就返回Long緩存池的對象,不然就使用構造方法new一個對象。因此當兩個-127-128範圍以外的相同的值進行==比較時,其實怎麼都不會返回true的,由於他們的對象都是new出來的,反之則是從緩存中去除,都是true內存