3 回答

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
請(qǐng)參閱https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3最后以粗體突出顯示的重要部分:
浮點(diǎn)數(shù)到整型 T 的縮小轉(zhuǎn)換需要兩個(gè)步驟:
第一步,如果 T 為 long,則浮點(diǎn)數(shù)轉(zhuǎn)換為 long;如果 T 為 byte、short、char 或 int,則浮點(diǎn)數(shù)轉(zhuǎn)換為 int,如下所示:
如果浮點(diǎn)數(shù)為 NaN(第 4.2.3 節(jié)),則第一步轉(zhuǎn)換的結(jié)果為 int 或 long 0。
否則,如果浮點(diǎn)數(shù)不是無窮大,則浮點(diǎn)值將四舍五入為整數(shù)值 V,使用 IEEE 754 向零舍入模式(第 4.2.3 節(jié))向零舍入。那么有兩種情況:
如果T是long,并且這個(gè)整數(shù)值可以表示為long,那么第一步的結(jié)果就是long值V。
否則,如果這個(gè)整數(shù)值可以表示為int,那么第一步的結(jié)果就是int值V。
否則,必須滿足以下兩種情況之一:
該值必須太?。ù蠓鹊呢?fù)值或負(fù)無窮大),并且第一步的結(jié)果是 int 或 long 類型的最小可表示值。
該值必須太大(大幅度的正值或正無窮大),并且第一步的結(jié)果是 int 或 long 類型的最大可表示值。
也就是說,你的雙精度值是 2147483648 (你可以嘗試使用更大的數(shù)字)。int int 的最高可表示值是 2147483647。這就是為什么你最終得到 2147483647。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
int
這是因?yàn)镴ava 中類型的最大值是2147483647
。當(dāng)您調(diào)用時(shí),Double::doubleValue
如果您嘗試轉(zhuǎn)換的值超出范圍并且此方法的文檔中有說明,它將執(zhí)行縮小轉(zhuǎn)換:
在縮小基元轉(zhuǎn)換后,以 int 形式返回此 Double 的值。
它甚至指向JLS 5.1.3,其中描述了這種縮小轉(zhuǎn)換。
轉(zhuǎn)換浮點(diǎn)值需要兩個(gè)步驟。第一步、第三點(diǎn)、選項(xiàng) b 的句子中解釋了您看到此值的原因:
該值必須太大(大幅度的正值或正無窮大),并且第一步的結(jié)果是 int 或 long 類型的最大可表示值。
浮點(diǎn)數(shù)到整型 T 的縮小轉(zhuǎn)換需要兩個(gè)步驟:
第一步,如果 T 為 long,則浮點(diǎn)數(shù)轉(zhuǎn)換為 long;如果 T 為 byte、short、char 或 int,則浮點(diǎn)數(shù)轉(zhuǎn)換為 int,如下所示:
如果浮點(diǎn)數(shù)為 NaN(第 4.2.3 節(jié)),則第一步轉(zhuǎn)換的結(jié)果為 int 或 long 0。
否則,如果浮點(diǎn)數(shù)不是無窮大,則浮點(diǎn)值將四舍五入為整數(shù)值 V,使用 IEEE 754 向零舍入模式(第 4.2.3 節(jié))向零舍入。那么有兩種情況:
a如果T是long,并且這個(gè)整數(shù)值可以表示為long,那么第一步的結(jié)果就是long值V。
b否則,如果這個(gè)整數(shù)值可以表示為int,那么第一步的結(jié)果就是int值V。
否則,必須滿足以下兩種情況之一:
a值必須太小(大幅度的負(fù)值或負(fù)無窮大),并且第一步的結(jié)果是 int 或 long 類型的最小可表示值。
b?該值必須太大(大幅度的正值或正無窮大),并且第一步的結(jié)果是 int或 long 類型的最大可表示值。
在第二步中:
如果T是int或者long,轉(zhuǎn)換的結(jié)果就是第一步的結(jié)果。
如果 T 是字節(jié)、字符或短整型,則轉(zhuǎn)換結(jié)果是第一步結(jié)果縮小轉(zhuǎn)換為類型 T(第 5.1.3 節(jié))的結(jié)果。
因此,在這種情況下,結(jié)果將是 type 的最大可表示值int
。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
int值不能超過Integer.MAX_VALUE,即2147483647。當(dāng)調(diào)用intValue()時(shí),您自愿放棄所有尾部。
添加回答
舉報(bào)