乙個奇妙的java坑 Long 型別的比較

2021-08-11 14:53:33 字數 1072 閱讀 3855

if (user.getid() == admin.getid())  else
兩個long型的id之間的比較,結果卻是false。

再看乙個

long id1 = 123l;  

long id2 = 123l;

system.out.println(id1 == id2);

輸出: true

同是long型,同是==,為什麼結果不一樣呢?

看看源**:

private

static

class

longcache

static

final long cache = new long[-(-128) + 127 + 1];

static

}

public

static long valueof

(long l)

return

new long(l);

}

原來是因為long中有乙個靜態的內部類longcache,專門用於快取-128至127之間的值,一共256個元素。

如果僅僅是快取下來而不去使用那麼就沒有任何意義。valueof(long l)就是使快取派上用場的方法,它會判斷傳入的引數是否在-128-127之間,如果是則直接從快取中返回對應的引用,否則新建立乙個long的例項。

long重寫了equals方法,如下:

public

boolean

equals

(object obj)

return

false;

}

它是先通過.longvalue()方法獲取long物件的基本型別long的值之後再做比較的。

但是我們用longvalue比較時容易忘記後面乙個包裝類調longvalue方法

所以,最好還是使用equals進行比較。也可以直接用.longvalue()比較

Java 關於Integer包裝類的乙個坑

這也算是一道面試題,很多初學者在看到以下 的時候第一反應就是輸出兩個true,其實不然。public class integertest 博主當初的反應也是一樣,認為兩個結果都為true,但實際的執行結果如下 true false很多沒看過原始碼的小夥伴會和博主一樣一頭霧水 跟想象的完全不一樣嘛 其...

android jni 返回java的乙個類

jclass objclass env findclass env,類的路徑 獲取類物件 路徑 com.org.demo.test 內部類則用com.org.demo.test cls jmethodid mid env getmethodid env,objclass,v 獲取類的構造方法 job...

租房了,說乙個奇妙的事情。

不知不覺,一年了,換房了,當然這裡一切都變好了。房東就要加價了,也許這房並不像正常居室那般,空間卻是足的,像是旅館,你在裡面呆了去,久了,人畢竟是有感情的,就不想離開。可是我已經呆了好久了,那麼既然大家沒達成共識,就好聚好散了!於是我換了,地方就幾步,租在別人家。剩下的,那個屋子房東應該是可以租給更...