爲什麼JAVA中long後面要加L?float要加F ?

問題背景

今天在寫代碼時,將之前的一個變量進行了修改,運行單測的時候發現單測跑不過了,有點疑惑:

原代碼簡化下:

count = 123;
Long MAX_SIZE = 3 * 1024 * 1024 * 1024L;
if (count > MAX_SIZE) {
   do error 邏輯
}

修改後的代碼:

count = 123;
long MAX_SIZE = 3 * 1024 * 1024 * 1024;
if (count > MAX_SIZE) {
  do error 邏輯
}

做此次修改主要是避免每次都拆裝箱,結果修改後,if 條件變爲了true,執行到了 異常流的處理邏輯。

原因

java中的整型默認爲int, 3 * 1024 * 1024 * 1024 超過了 int 的最大值(2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647),導致溢出變爲了 -1073741824,所以出現了上面的問題。

知識點

java中的整型默認爲int,int轉爲long是安全的,所以會自動轉,能編譯通過。
浮點數不加F默認是double類型,double轉float可能損失精度,因爲不會自動轉,編譯通不過。

轉換的目的類型佔得空間範圍一定要大於轉化的源類型
正向過程:由低字節向高字節自動轉換
byte->short->int->long->float->double
逆向過程不會自動轉,編譯通不過,使用強制轉換,可能丟失精度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章