@wxf
2019-07-25T17:53:52.000000Z
字数 872
阅读 807
老马说编程
char —— Java中进行字符处理的基础。char用于表示一个字符,这个字符可以是中文字符,也可以是英文字符。赋值时把常量字符用单引号括起来,如:
char c = 'H'
char z = '中'
前面的章节中提到字符类型可以进行算术运算和比较,那么char的本质是什么呢?
在Java内部进行字符处理时,采用的都是Unicode,UTF-16BE。UTF-16使用两个或四个字节表示一个字符,Unicode编号范围在65536以内的占两个字节,超出范围的占四个字节。
所以char本质上是一个固定占用两个字节的无符号正整数(char是正整数),这个正整数与Unicode编号一一对应,用于表示那个Unicode编号对应的字符。此外,需要使用两个char来表示Unicode编号在65536以外的字符。
char c = 'A'
将一个能用Ascii码表示的字符赋给一个字符变量char c = '我'
中文字符赋值,这里是将这个字符形式对应的Unicode编号值赋给变量,'马'对应的Unicode编号是39532char c = 39532
直接将十进制的常量赋给字符char c = 0x9a6c
将16进制常量赋给字符char c = '\u9a6c'
按Unicode字符形式赋值由于char本质上是一个整数,所以可以进行整数运算。在进行运算时会被当做int,所以运算结果不能直接赋值给char类型,需要强制类型转换,这和byte,short参与整数运算时类似的。char类型的比较就是其Unicode编号的比较。
char的加减运算就是按其Unicode编号进行运算,一般对字符做加减运算没什么意义,但Ascii码字符是有意义的。比如大小写转换,大写A-Z的编号是65-90,小写a-z的编号是97-122,正好相差32,所以大写转小写只需加32,而小写转大写只需减32。加减运算的另一个应用是加密和解密,将字符进行某种可逆的数学运算可以做加解密。
参考资料:
老马说编程(微信号:laoma_shuo)—— char的真正含义