Java | 为什么说 char 类型也属于 Java 五大整型之一

281 阅读2分钟

备注:

Java 中基本类型只有 8 种基本类型,其中这 8 种基本类型分为 7 种数值类型和 1 种非数值类型(布尔类型)。数值类型之间可以相互转换。7 种数值类型又可以分为两堆,一堆是整型类型,另一堆是浮点数类型。浮点数类型便是最常见的 float 和 double。其它 5 种基本类型按照字节长度来看,也可以依次列举出来 byte、short、char、int、double。

在 上面列举出来的 5 种基本类型,可以一眼看出其中的 4 种——int、short、int、long。可为什么说 char 也属于整数类型呢?

1、存储角度

每种基本数据类型都有自己的字节长度,用于存放不同数量数值。 char 也不例外。char 和 short 一样,有两个字节的长度,也就是 16 位的字节长度。而与 short 不一样的是:short 我们了解,两个字节 16 位,存放的是 2^-15 到 2^15-1 也就是位于区间 [-32768,+32767] 之间。而 char 只存放整数,是的,因为 char 表示的就是字符类型,按照 Unicode 编码,对应的正是 16 位 Unicode 字符集(你绝对没有见到过负数的 Unicode 字符,对吧)。既然 char 本身就是要表示正数的字符,所以 char 存放的数值就是 0 到 2^16 也就是位于正半轴的 [0,65536]之间的整数。

所以,联想同为 16 位 Unicode 也可以较为容易得出 char 所存放的整数的区间。

个人是这么理解的,char 类型和其他 4 种整数类型无异,都是存放的整数。只是因为要表示字符的需要,拿去存放正数范围的数字。只是,编码不一样,转化为对应的字符。

出于这样的理解,可以得出,char 变量也可正常参与算术运算以及赋值运算。

2、表现

2.1、char 变量的值可以是整数:

    char a = 48;
    System.out.println("a = " + a);//a = 0

2.2、char 变量可直接参数与其它整数类型的运算:

    System.out.println(a+10);//58

原因:

实际上,都是该字符对应的编码参与运算。

备注:48 对应字符集中的数字 0。

小结

1、char 属于整数类型之一。有两个字节长,对应同为两个字节编码的 Unicode 字符集。存放的是用于表示字符的字符值。因为 Unicode 字符集 中没有负数,所以对应的,char 的字节也全都用于存放 0 及 0 以后的正数。

2、char 变量参与赋值运算,算术运算,实际上是它的编码值参与运算。

参考来源

疯狂 Java 讲义 第 4 版 3.4.2 字符型

Ps:新手路上,文中如有错误或者不严谨的地方,敬请指正。