char的本质

char用于表示一个字符,这个字符可以是中文字符,也可以是英文字符。

char c = 'A';
char z = '马';

char本质(Java中)

一个固定占用两个字节的无符号正整数,这个正整数对应于Unicode编号,用于表示那个Unicode编号对应的字符。具体编码格式是UTF-16BE,与整数的内存表示是一致的。

由于固定占用两个字节,char只能表示Unicode编号在65 536以内的字符,而不能表示超出范围的字符。超出范围的字符使用两个char。

多种赋值方式

方式

说明

char c = 'A'

最常见的方式,将一个能用ASCII码表示的字符赋给一个字符变量。

char c = '马'

将中文字符赋值给一个字符变量。

需要注意的是,直接写字符常量的时候应该注意文件的编码,比如,GBK编码的代码文件按UTF-8打开,字符会变成乱码,赋值的时候是按当前的编码解读方式,将这个字符形式对应的Unicode编号值赋给变量。

char c = 39532

​“马”对应的Unicode编号是39 532,所以上面的方式是一样的。

该方式是直接将十进制的常量赋给字符。

char c = 0x9a6c

将十六进制常量赋给字符。

char c = '\u9a6c'

按Unicode字符形式。

后四种赋值方式都是一样的,本质都是将Unicode编号39 532赋给了字符。

运算

由于char本质上是一个整数,所以可以进行整数能做的一些运算,在进行运算时会被看作int,但由于char占两个字节,运算结果不能直接赋值给char类型,需要进行强制类型转换,这和byte、short参与整数运算是类似的。char类型的比较就是其Unicode编号的比较。

char的加减运算就是按其Unicode编号进行运算,一般对字符做加减运算没什么意义,但有些场景的运算是有意义的:

  • ASCII码字符是有意义的。比如大小写转换,大写A~Z的编号是65~90,小写a~z的编号是97~122,正好相差32,所以大写转小写只需加32,而小写转大写只需减32。
  • 加减运算的另一个应用是加密和解密,将字符进行某种可逆的数学运算可以做加解密。

char的位运算可以看作是对应整数的位运算,只是它是无符号数,也就是说,有符号右移>>和无符号右移>>>的结果是一样的。

#面试##大厂##成长##数据的本质##Java原理#
Java编程原理 文章被收录于专栏

知其然知其所以然,只有了解了底层原理,借助第一性原理,才可以运用自如,成为真大师。 什么是第一性原理? 第一性原理最早由亚里士多德提出,他将其定义为:“事物被已知的第一项前提。” 简单来说,它要求你不要用“类比”去思考(即:因为别人这样做,或者以前这样做,所以我也这样做),克服从众心理(FOMO)和经验偏差,在科技创新、商业决策中找到成本与效率的最优解。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务