Java Char类型介绍

一、表现形式

char类型的字面量值,通常有三种形式,都是位于一对单引号 ''中。

  1. 字符常量,'a'
  2. 十六进制值,'\u03C0'代表数学字符π
  3. 特殊字符的转义序列,'\n'代表换行

其中,第一种和第三种是我们在程序中经常会使用到的形式。
特殊字符的转义序列用于表示不能或者不方便输入的字符。第二种形式都是\u + 4位十六进制数,本质也属于转义序列,但是它能够表示所有字符。我们有时候提及的char值,其实是第二种形式表示的十六进制值,这也是char类型存储值的本质形式,就是说你程序中书写’a’,编译器最终理解的是‘\u0061’,第一种形式的出现是为了方便程序员编程而已。

二、Unicode字符集

Java语言使用了Unicode字符集,字符集的编码表对每个字符给出了对应的代码值,称为码点(code point),在Unicode标准中码点采用十六进制书写,并加上前缀U+,如下图所示,π的码点是【U+03C0】, 从此可以看出char类型变量存储的是码点值

在这里插入图片描述

Unicode的部分编码表(查看Unicode所有字符的编码表👉Unicode字符百科),如下图所示:
在这里插入图片描述
在1991 年发布了 Unicode 1.0 , 当时仅占用 65 536 个代码值中不到一半的部分。 在设计 Java 时决定采用16 位Unicode 字符集,这样会比使用 8 位字符集的程序设计语言有很大的改进。十分遗憾 , 经过一段时间 , 不可避免的事情发生了。 Unicode 字符超过了65 536 个, 其主要原因是增加了大量的汉语 、 日语和韩语中的表意文字 。 现在 , 16 位的 char 类型已经不能满足描述所有 Unicode 字符的需要了 。

从Java SE 5.0 开始,码点 ( code point )是指与一个编码表中的某个字符对应的代码值。 在Unicode 标准中,码点采用十六进制书写, 并加上前缀U + , 例如 U + 0041 就是拉丁字母 A 的码点 。 Unicode 的码点可以分成 17 个代码级别 ( codeplane )。 第一个代码级别称为基本的多语言级别 ( basic multilingual plane ) , 码点从 U + 0000 到 U + FFFF , 其中包括经典的 Unicode 代码 ; 其余的 16个级另丨 〗 码点从 U + 10000 到 U + 10 FFFF , 其中包括一些辅助字符 ( supplementary character ) 。UTF - 16 编码采用不同长度的编码表示所有 Unicode 码点。 在基本的多语言级别中 , 每个字符用 16 位表示 , 通常被称为代码单元 ( code unit ) ; 而辅助字符采用一对连续的代码单元进行编码。 这样构成的编码值落人基本的多语言级别中空闲的2048 字节内 , 通常被称为替代区域 ( surrogate area ) [ U + D 800 ~ U + DBFF 用于第一个代码单兀, U + DC 00~ U + DFFF 用于第二个代码单元 ]。 这样设计十分巧妙 , 我们可以从中迅速地知道一个代码单元是一个字符的编码, 还是一个辅助字符的第一或第二部分 。 例如 , ⑪ 是八元数集 的一个数学符号, 码点为U + 1 D 546 , 编码为两个代码单兀 U + D 835 和U + DD 46。在 Java 中, char 类型描述了UTF - 16 编码中的一个代码单元。

码点 ( code point )是指一个编码表中的某个字符对应的代码值,Unicode码点可以分为17个代码平面,U+0000~U+FFFF是基本多语言平面,其他16个代码平面表示辅助字符。

UTF-16使用不同长度的编码表示所有Unicode字符。基本多语言平面用16位表示,称为代码单元。辅助字符采用一对连续的代码单元表示。

一个字符、可以由一个代码单元表示(基本多语言平面),也可以由一对代码单元表示(辅助字符)。

Java的char类型只能表示一个代码单元的码点,因为它只有16位。需要两个代码单元的码点只能放在字符串中

U+ 1D546
去1 后D546 1101(01) (01) 01000110
0035 + D800 = D835
0146 + DC00 = DD46

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月几时有666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值