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

Java 與 C/C++ 數據類型長度對照表詳解

     編輯:Java 相關知識

核心對照表

Java 類型位數字節C/C++ 對應類型 (32/64位)範圍 / 說明
boolean~11 (JVM 實現相關)bool / _Booltrue/false,非數值類型
byte81signed char / int8_t-128 ~ 127
short162short / int16_t-32,768 ~ 32,767
char162wchar_t / char16_tUnicode 字符 \\u0000 ~ \\uFFFF
int324int / int32_t-2³¹ ~ 2³¹-1
float324floatIEEE 754 單精度
long648long long / int64_t-2⁶³ ~ 2⁶³-1
double648doubleIEEE 754 雙精度

關鍵差異深度解析

1. 固定長度 vs 平台相關

  • Java:語言規範強制固定長度(int 永遠 32 位),實現「一次編寫,到處運行」
  • C/C++:int、long 長度隨編譯器/架構變化(LP64 / ILP64 / LLP64 模型),需使用 stdint.h 固定寬度類型(int32_t 等)保證可移植性

2. 字符類型本質不同

  • Java char:無符號 16 位 Unicode 代碼單元(UTF-16),範圍 0~65535
  • C/C++ char:有符號/無符號由實現定義,通常 8 位存 ASCII/UTF-8 字節
  • C/C++ wchar_t:Windows 16 位,Linux 32 位,不可移植

3. boolean 真假表示

  • Java:獨立類型,只能 true/false,不可與數值互換
  • C/C++:0 為假,非 0 為真;C99 _Bool、C++ bool 仍可隱式轉換為整數

4. 浮點數嚴格性

  • Java:strictfp 關鍵字強制 IEEE 754 模式,跨平台結果位級一致
  • C/C++:允許使用擴展精度暫存器(x87 80 位),結果可能因優化等級不同而異

JNI 開發實戰對照

Java 類型JNI 類型JNI 簽名C/C++ 推薦類型
booleanjbooleanZuint8_t / bool
bytejbyteBint8_t
charjcharCuint16_t / char16_t
shortjshortSint16_t
intjintIint32_t
longjlongJint64_t
floatjfloatFfloat
doublejdoubleDdouble
ObjectjobjectLcls;jobject
StringjstringLjava/lang/String;jstring
int[]jintArray[IjintArray

序列化/網絡傳輸注意事項

  1. 位序:Java 統一大端序;C/C++ 需手動 htonl/ntohl 或使用 ByteBuffer.order(ByteOrder.BIG_ENDIAN)
  2. 結構體對齊:C/C++ 結構體有填充字節,Java 類無此概念,跨語言傳輸需顯式定義協議
  3. 字符串編碼:Java 內部 UTF-16,網絡傳輸建議統一 UTF-8,C/C++ 端用 iconv / ICU 轉換

總結

理解 Java 與 C/C++ 數據類型的異同,是JNI 開發、跨語言 RPC、嵌入式協議對接、高性能序列化庫設計的基石。牢記「Java 固定、C 變化;Java 字符 16 位、C 字節 8 位;序列化必須顯式約定位序與對齊」三大原則,可避免 90% 的跨語言數據交互坑。

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