首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 數據類型詳解(上):整數、浮點與精度陷阱

     編輯:Java 綜合教學

Java 數據類型詳解(上):整數、浮點與精度陷阱

一、 基本數據類型總覽

Java 數據類型圖譜

二、 整數類型:範圍、存儲與進制

類型位數字節取值範圍默認值
byte81-128 ~ 127 (-2⁷ ~ 2⁷-1)0
short162-32,768 ~ 32,767 (-2¹⁵ ~ 2¹⁵-1)0
int324-2,147,483,648 ~ 2,147,483,647 (-2³¹ ~ 2³¹-1)0
long648-9.22e18 ~ 9.22e18 (-2⁶³ ~ 2⁶³-1)0L
  • 補碼表示:正數原碼存儲,負數絕對值原碼按位取反加 1。byte 最小值 -128 的二進制 1000_0000 即為其補碼,無法表示 -129(超出 8 位)。
  • 字面量進制:十進制默認;八進制以 0 開頭(如 011 = 9);十六進制以 0x 開頭(如 0x11 = 17);二進制(JDK 7+)以 0b 開頭。
  • 強轉截斷:超出範圍強轉會截斷高位。例:(byte)129 → -127(1000_0001 視為補碼,符號位 1,數值位取反減 1 得 127)。

三、 浮點類型:IEEE 754 結構與精度本質

類型總位數符號位指數位尾數位指數範圍(移碼)近似十進制範圍有效數字
float321823-126 ~ +127±3.4E387~8 位
double6411152-1022 ~ +1023±1.79E30815~16 位

float 記憶體佈局 double 記憶體佈局

  • 科學計數法存儲:值 = (-1)^符號 × 1.尾數 × 2^(指數-偏移量)。隱含整數位 1 不佔尾數位,故 float 實際精度 24 位(~7.2 十進制位),double 53 位(~15.9 十進制位)。
  • 精度陷阱:十進制小數多無法精確轉為二進制有限位。2.2f 在 float 中實為 2.200000047683716;2.25f(二進制 10.01)則精確無誤。
  • 擴大轉換誤差:float → double 會保留 float 的近似誤差。double d = (double)2.2f 印出 2.200000047683716,而 double d = 2.2 則為最接近 2.2 的 double 值。

四、 實戰測試代碼片段

public static void main(String[] args) {
    // 進制與強轉測試
    byte b1 = 011;        // 八進制 9
    byte b2 = -011;       // -9
    byte b3 = (byte)01111; // 八進制 585 → 截斷為 73
    byte b4 = (byte)129;  // 十進制 129 → -127
    byte b5 = 0x11;       // 十六進制 17
    byte b6 = -0x11;      // -17

    // 浮點精度測試
    float f = 2.2f;
    double d1 = (double)f;   // 2.200000047683716
    f = 2.25f;
    double d2 = (double)f;   // 2.25 精確
}

理解補碼與 IEEE 754 存儲細節,是避免數值計算 Bug、優化存儲空間的關鍵。下篇將深入字符、布爾與引用類型。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved