2

char 值在 JVM 中是如何表示的?比方说

char ch = 'c';

ch的值在 JVM 中如何表示为16 位无符号整数?

4

3 回答 3

8

太长; 没读过;1 . java 中的字符使用 UTF-16 2表示。顾名思义,一个 char 的大小为 16 位3a 的默认值为0。
     
     
      char


引用关于s的Java 文档:char

Unicode 字符表示

char 数据类型(以及因此 Character 对象封装的值)基于原始 Unicode 规范,该规范将字符定义为固定宽度的 16 位实体。此后,Unicode 标准已更改为允许表示需要超过 16 位的字符。合法代码点的范围现在是 U+0000 到 U+10FFFF,称为 Unicode 标量值。(参考 Unicode 标准中 U+n 符号的定义。)

从 U+0000 到 U+FFFF 的字符集有时称为基本多语言平面 (BMP)。码位大于 U+FFFF 的字符称为补充字符。Java 2 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示。在此表示中,补充字符表示为一对 char 值,第一个来自高代理范围 (\uD800-\uDBFF),第二个来自低代理范围 (\uDC00-\uDFFF)。

因此,char 值表示基本多语言平面 (BMP) 代码点,包括代理代码点或UTF-16 编码的代码单元。一个 int 值表示所有 Unicode 代码点,包括补充代码点。int 的低(最低)21 位用于表示 Unicode 代码点,高(最高)11 位必须为零。除非另有说明,关于补充字符和代理字符值的行为如下:

只接受 char 值的方法不支持补充字符。它们将代理范围中的 char 值视为未定义字符。例如,Character.isLetter('\uD840') 返回 false,即使此特定值后跟字符串中的任何低代理值将表示一个字母。接受 int 值的方法支持所有 Unicode 字符,包括补充字符。例如,Character.isLetter(0x2F81A) 返回 true,因为代码点值表示一个字母(CJK 表意文字)。在 J2SE API 文档中,Unicode 代码点用于 U+0000 到 U+10FFFF 范围内的字符值,Unicode 代码单元用于16 位字符值,即 UTF-16 编码的代码单元. 有关 Unicode 术语的更多信息,请参阅 Unicode 词汇表。

于 2012-07-15T12:16:20.630 回答
2

Achar存储为 UTF-16 代码点,即一个两字节整数。

所以小写的“c”是 99(十进制)或 0x0063(十六进制)。

于 2012-07-15T12:18:44.563 回答
0

1. char 在 Java 中表示为16 位 Unicode值。

2.char的默认值为'\u0000'

于 2012-07-15T12:19:19.087 回答