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

Java 基本資料類型完整指南:從入門到精通

     編輯:Java 相關知識

Java 資料類型體系概覽

在 Java 程式設計中,每個變數都必須宣告其資料類型。Java 的資料類型主要分為兩大類別:基本類型與參考類型。基本類型是語言內建的,不屬於物件,主要為了執行效率而設計;參考類型則包含類別、介面、陣列等複雜資料結構。

基本類型分類架構

基本類型包含 boolean 類型與數值類型。數值類型再細分為整數類型與浮點數類型:

  • 整數類型(5種):byte、short、int、long、char(本質上是特殊的 int)
  • 浮點數類型(2種):float、double

Java基本資料類型分類圖

基本類型深度解析

Java 為基本類型提供語言層級支援,使用保留關鍵字表示。基本類型是單一值而非複雜物件,非面向物件設計,主要考量效能。同時提供包裝類別對應物件操作需求。

整數類型詳細說明

整數類型分別佔用 8、16、32、64、16 bits。整數類型的寬度定義的是變數或運算式的行為,而非記憶體佔用大小。JVM 可自由使用任何大小的記憶體空間,只要符合規範行為即可。

  • byte、short、int、long 皆為有號,採用二補數表示
  • char 使用 16 位無號表示,對應 UTF-16 編碼集

byte 類型

佔 1 位元組(8 bits),最小整數類型。適用於網路、檔案、IO 資料流處理以節省記憶體。取值範圍 [-128, 127],預設值 (byte)0。超出範圍賦值會編譯錯誤(如 byte b = 128)。

字面值陷阱:呼叫 test(byte b) 時傳入 test(0) 會編譯錯誤,因為 0 是 int 字面值,方法匹配優先 test(int)。但 byte b = 0 合法,因為賦值時會自動窄化轉換。

運算提升:byte 運算時自動提升為 int,需強制轉型回 byte:

byte s1 = 'a'; 
byte s2 = 'b'; 
byte sum = (byte)(s1 + s2); // 必須強制轉型

short 類型

16 bits,範圍 [-2^15, 2^15-1]。較少使用,運算同樣提升為 int 或更高類型。

int 類型

32 bits,範圍 [-2^31, 2^31-1]。有號二補數表示,常用於迴圈控制。Java 8+ 支援無號 32 位整數 [0, 2^32-1]。

long 類型

64 bits,範圍 [-2^63, 2^63-1],預設值 0L。超大數值運算使用,不足時可用 BigInteger。

char 類型

16 bits,範圍 [0, 65535],無號,預設 '\u0000'。Java 使用 Unicode 字元集,支援所有人類語言。支援算術運算(如 ch++),運算時轉為 int 需強制轉回。

char ch1 = 88;    // 'X'
char ch2 = 'A';   // 65
ch2++;            // 變成 'B' (66)

浮點數類型

遵循 IEEE 754 標準:

  • float:32 bits,單精度,速度較快、記憶體較小,極大/極小值不精確。宣告需加 f/F 後綴:float f = 10.0f;
  • double:64 bits,雙精度,預設浮點字面值類型。java.lang.Math 方法多用 double。高精度需求可用 BigDecimal。

boolean 類型

只有 true/false 兩值,預設 false。與數值 0 無關,不可相互轉換。

字面值詳解

字面值是原始碼中固定值的表示方式,分類如下:

整數字面值

支援多進制表示:

  • 十進制:10, -200
  • 十六進制:0xFF, 0X1A
  • 八進制:077(數字 0-7)
  • 二進制:0b1010(JDK 7+)

預設為 int 類型,加 L/l 為 long。int 字面值可自動窄化賦值給 byte/short/char(範圍內)。

浮點數字面值

  • float:加 f/F 後綴,如 11.8F, 1.23e-4F
  • double:預設或加 d/D,如 10.4, 1.23E3, 10D

支援科學記號(E/e)。

字元與字串字面值

  • 字元:單引號 'A', '\n'。支援跳脫序列(\uXXXX Unicode、\ddd 八進制)
  • 字串:雙引號 "Hello",可包含跳脫字元,需單行或用 + 連接

特殊字面值

  • null:可賦值給任何參考類型,表示無參考對象
  • Class Literal:String.class, Integer.class 表示類型本身

數值字面值底線分隔(JDK 7+)

可在數字間插入底線提升可讀性:int x = 123_456_789;, float f = 1.22___33__44;。編譯時自動移除。限制:僅能分隔數字,不可開頭/結尾/小數點旁。

基本類型轉換規則

boolean 與其他 7 類型不可轉換。數值類型間可轉換,分自動(隱式)與強制(顯式)。

類型層級順序

byte < (short = char) < int < long < float < double

自動轉換(擴寬轉換)

小轉大自動完成。字面值賦值給 byte/short/char/long 也自動處理(即使目標比 int 小)。可能精度損失的情況:

  • int → float
  • long → float
  • long → double
  • float → double(無 strictfp 時)

自動轉換不會拋出執行時例外。

強制轉換(縮小轉換)

大轉小或 short↔char 需強制轉型運算子 (type)。可能精度損失與數值大小變化(取模運算)。

int a = 256;
byte b = (byte)a; // b = 1 (256 % 256)
int c = 200;
byte d = (byte)c; // d = -56 (200 - 256)

浮點轉整數會截斷小數部分,超出範圍同樣取模。

賦值與運算式中的轉換細節

  • 字面值賦值:int 字面值可賦值給 byte/short/char/int(範圍內)。long 字面值賦值給 byte 即使範圍內也需強制轉型
  • 運算式自動提升:
    • 所有 byte/short/char 提升為 int
    • 有 long 則整體提升為 long,同理 float、double

基本類型轉換總結圖

總結

掌握 Java 基本資料類型的特性、取值範圍、轉換規則與字面值表示,是撰寫高效、正確 Java 程式的基礎。實際開發中應根據業務需求選擇適當類型,注意自動提升與強制轉換的邊界情況,避免精度損失與數值溢出錯誤。

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