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

Java 中文占 32 位?實際是 int 類型打印導致

     編輯:程式設計綜合問答

現象

32 位 JDK,GBK 編碼中文「張」佔 2 字節,但打印每字節顯示 32 位(高位全 1)。

原因

代碼中將 byte 強轉或賦值給 int 變量打印:
System.out.println((int)byteVal);
int 佔 4 字節 = 32 位,符號位擴展導致高位全 1(負數 byte 符號擴展)。

驗證


byte[] gbk = "张".getBytes("GBK"); // 長度 2
for (byte b : gbk) {
    System.out.println(Integer.toBinaryString(b & 0xFF)); // 掩碼取低 8 位
    // 輸出 8 位二進制,無高位 1
}

結論

  • 與操作系統 32/64 位無關,與 JDK 位數無關。
  • Java byte 為有符號 8 位,打印時轉 int 發生符號擴展。
  • 正確查看字節位模式:b & 0xFF 取無符號值。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved