在 Java 中,將 long 類型轉(zhuǎn)換為 int 時(shí),如果 long 的值超出了 int 的范圍,就會(huì)發(fā)生溢出,導(dǎo)致結(jié)果為負(fù)數(shù)。具體來說, int 類型的取值范圍是從 -2,147,483,648 到 2,147,483,647,而 long 類型的取值范圍更大(從 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807)。
為什么會(huì)變成 -1
當(dāng)你將一個(gè) long 值轉(zhuǎn)換為 int 時(shí),Java 只會(huì)取 long 值的低 32 位(即 int 的有效位數(shù))。如果這個(gè)低 32 位的值恰好是 0xFFFFFFFF (即二進(jìn)制的 32 個(gè) 1),那么轉(zhuǎn)換后的 int 值就會(huì)是 -1。
Long num = Long.MAX_VALUE;
int i = num.intValue();
System.out.println(i)