关于java:Java-char-类型究竟占几个字节

32次阅读

共计 1383 个字符,预计需要花费 4 分钟才能阅读完成。

https://docs.oracle.com/en/ja…

Java 版本与 Unicode 版本对应关系

Java releaseUnicode version
Java SE 15Unicode 13.0
Java SE 13Unicode 12.1
Java SE 12Unicode 11.0
Java SE 11Unicode 10.0
Java SE 9Unicode 8.0
Java SE 8Unicode 6.2
Java SE 7Unicode 6.0
Java SE 5.0Unicode 4.0
Java SE 1.4Unicode 3.0
JDK 1.1Unicode 2.0
JDK 1.0.2Unicode 1.1.5

Unicode 一致性

char 类型以及封装类 java.lang.Character 的字段和办法是依据 Unicode 规范中的字符信息定义的,特地是作为 Unicode 字符数据库一部分的 UnicodeData 文件。此文件为每个调配的 Unicode 代码点或字符范畴指定属性,包含名称和类别。该文件可从 Unicode 联盟 http://www.unicode.org 取得。

Unicode 字符示意

char 数据类型(以及对象封装的值)Character 基于原始 Unicode 标准,该标准将字符定义为固定宽度的 16 位实体。尔后,Unicode 规范已更改为容许示意须要超过 16 位的字符。非法码点的范畴当初是 U+0000 到 U+10FFFF,称为 Unicode scalar value。(请参阅 Unicode 规范中 U+ n 符号 的 定义。)

从 U+0000 到 U+FFFF 的字符集有时称为根本多语言立体 (BMP)。码位大于 U+FFFF 的字符称为补充字符。Java 平台在 char 数组和 String 和 StringBuffer 类中应用 UTF-16 示意。在此示意中,补充字符示意为 一对 char 值,第一个来自高代理(high-surrogates)范畴 (\uD800-\uDBFF),第二个来自 低代理(low-surrogates)范畴 (\uDC00-\uDFFF)。

因而,一个 char 值示意根本多语言立体 (BMP – Basic Multilingual Plane) 代码点,包含代理代码点或 UTF-16 编码的代码单元。一个 int 值示意所有 Unicode 代码点,包含补充代码点。用整型 int 的低 21 位示意 Unicode 代码点,高 11 位必须为零。除非另有阐明,否则对于补充字符和代理 char 值的行为如下:

  • 只承受 char 值的办法不反对补充字符。它们将 char 代理范畴中的值视为未定义的字符。例如,Character.isLetter(‘\uD840’)返回 false,即便此特定值后跟字符串中的任何低代理值将代表一个字母。
  • 承受 int 值的办法反对所有 Unicode 字符,包含补充字符。例如,Character.isLetter(0x2F81A)返回 true 是因为代码点值示意一个字母(CJK 表意文字)。

在 Java SE API 文档中,Unicode 代码点(Unicode code point)用于 U+0000 到 U+10FFFF 范畴内的字符值,Unicode 代码单元(Unicode code unit)用于 UTF-16 编码 char 的代码单元的 16 位值。无关 Unicode 术语的更多信息,请参阅 Unicode 词汇表。

总结

看完以上文档,你能答复题目的问题了吗?
欢送在评论里写下你的答案

正文完
 0