「在 JAVA 中,漢字『我』輸出的值為 25105,轉換成 16 進制 Unicode 編碼為 \u6211。請問,這個數值如何得來?這其中與 Unicode 又有何關聯?」
Java char 類型採用 UTF-16 編碼,每個字符佔 2 字節(16 位),直接對應 Unicode 碼點(BMP 範圍內)。
U+6211(十六進制)。6211 轉十進制:6×16³ + 2×16² + 1×16¹ + 1×16⁰ = 6×4096 + 2×256 + 16 + 1 = 24576 + 512 + 17 = 25105。char c = '我'; 其內存值即為 25105(十進制),打印 (int)c 輸出 25105。\u6211 直接表示該字符(編譯器編譯時轉換)。public class UnicodeDemo {
public static void main(String[] args) {
char c = '我';
System.out.println("十進制: " + (int) c); // 25105
System.out.println("十六進制: " + Integer.toHexString(c)); // 6211
System.out.println("Unicode 逃逸: \\u" + Integer.toHexString(c)); // \u6211
// 反向:從碼點構造字符
char c2 = 0x6211;
System.out.println("字符: " + c2); // 我
}
}
U+0000 ~ U+10FFFF。Java char 只能表示 BMP(U+FFFF 以內),輔助平面字符(如 Emoji 😀 U+1F600)需用 int 碼點或 String(UTF-16 代理對)表示。Character.codePointAt() / codePointCount() 處理完整碼點。25105 就是 Unicode 碼點 U+6211 的十進制形式。Java char 直接存儲 UTF-16 代碼單元,對於 BMP 字符即等於其 Unicode 碼點值。