
2.4.1 单个字符

1.字符存储
在Java语言中,字符的存储类型为字符类型(char)。
助记:char是字符的英文单词character的缩写,其发音为[ˈkærəktə(r)]。
计算机只能直接处理数字,不能处理文本。所以,在存储字符的时候,需要将每个字符转化为数字。在转化过程中,需要建立一套对应的转化关系。这套转化关系被称为编码。例如,常用的8位二进制的ASCII表就是一种编号。
(1)ASCII编码:ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套计算机编码系统,主要用于显示现代英语和其他西欧语言。它是现今通用的单字节编码系统,并等同于国际标准ISO/IEC 646。表2.6所示的ASCII码值表列出了常用的ASCII码值。
表2.6 ASCII码值表

续表

(2)Unicode编码:8位二进制的ASCII编码取值范围为0~255,能够表示的字符很少。为了表示更多的字符,Java语言的字符类型采用了Unicode编码。Unicode编码(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台进行文本转换和处理的要求。
Unicode编码占用2字节,如图2.26所示。由于2字节整数的范围为0~65535,因此可以表示65536个不同字符。
2.字符表示
(1)简单形式:在日常生活中,单个字符的使用比较少。例如,在成绩单中,A表示优秀,B表示良好。在Java语言中,单个字符被称为字符常量。很多时候数字内容表达的并不一定是数值。例如,班级编号的2-1中,2表示年级,1表示班级。由于计算机能力有限,为了避免这类信息对计算机造成困扰,所以在使用字符时,需要使用单引号引起字符,形式如图2.27所示。

图2.26 Unicode编码占2字节

图2.27 单个字符表示形式
注意:单个字符可以是单个字母、数字、字或符号。
【示例2-7】下面将使用代码展示单个字符。代码如下:

运行结果如下:

注意:%c是printf的格式符,用来显示字符。
助记:c是字符的英文单词character的首字母。
(2)转义字符形式:如果想输出一个换行符,很多程序员会直接使用以下代码:

使用这个代码,自己都会觉得不习惯;另外,在尝试编辑这行程序时,Java编译器也会出现错误信息。这是因为Java无法分辨这个换行符是一行程序的结束还是一个字符。
为了避免类似问题的出现,Java使用转义字符来表示换行符这类特殊的字符。在Java语言中,转义字符通过反斜杠“\”与普通字符的组合,来表示一些特殊的字符。转义字符中至少包含两个字符,第一个字符是转义符号“\”,第二个字符是需要表示的字符,如“\n”就是一个转义字符。
转义字符就是将字符原来的意思转换掉。例如,“\n”的意思被转换为换行符。Java编译器在遇到“\n”这两个字符时,就会对其进行转义,把这两个字符当成一个换行符。Java语言提供了多个转义字符,如表2.7所示。
表2.7 转义字符

【示例2-8】下面将使用转义字符显示一个单引号。代码如下:

运行结果如下:

由于整数和字符有严格的对应关系,所以Java语言提供了八进制表示和十六进制表示。下面将依次讲解这两种表示形式。
(3)八进制形式:采用八进制表示字符可以有两种形式,分别为类似转义字符的形式和直接形式。下面将依次讲解这两种形式。
使用类似转义字符的形式表示字符,需要在单引号中加入反斜杠及八进制,如图2.28所示。

图2.28 采用八进制表示字符
注意:图中的八进制可以是1~3位。
【示例2-9】下面将使用类似转义字符的形式表示字符。代码如下:

运行结果如下:

直接形式,就是直接使用八进制表示字符,如065,表示的就是字符5。
(4)十六进制形式:采用十六进制表示字符,需要在单引号中加入反斜杠、u及十六进制,如图2.29所示。

图2.29 采用十六进制表示字符
注意:图中的十六进制必须是4位。
【示例2-10】下面将使用类似转义字符的形式表示字符。代码如下:

运行结果如下:

总结以上内容,Java语言共支持4种字符表示方式,如表2.8所示。
表2.8 字符表示方式
