1.1 基本数据类型
Java有8种基本数据类型,分别是byte、short、int、long、float、double、char、boolean。这8种类型又可以划分为4个小类,每一个类型占据不同的内存空间,详细见下表:
整数类型
整数类型的最高位存放正负符号,1表示负、0表示非负,其余位置存放整数值。所以,根据不同整数类型的位数,我们可以推算出它的数据范围:
浮点类型
浮点类型采用科学计数法来表示数值,对于任意的小数,我们都可以采用统一的科学计数形式表示它。
0.0123 = 0.123 * 10^-1 12.345 = 0.12345 * 10^2 -123.45 = -0.12345 * 10^3
这种表示数字的形式包含三个要素:符号、指数、尾数。
浮点类型
就是将小数转换为科学计数法的形式,再将一串二进制的整数分为三段,分别存储小数的符号、尾数、指数。所以,float和double的表数范围如下:
字符类型
字符类型的本质也是整数,它采用16位的二进制整数来对字符进行编码,在Unicode字符集下,16位整数可以表示出65535个字符。其最小值为\u0000,最大值为\uffff。
布尔类型
布尔类型只包含两个值:true、false。所以实际上它只需要一位的存储空间即可,但Java虚拟机并没有规定布尔类型的具体实现,很多虚拟机实际是采用int来实现的布尔类型,这是出于性能的考虑。
类型转换
除了布尔类型之外,其余7种类型均为数字,所以它们之间可以相互转换。而转换的关键是数据类型的范围,下图给出了7种类型由小到大的数据范围。
由小到大地转换是没有风险的,可以直接转,这叫自动类型转换。由大到小转换则存在风险,很有可能会在转换时出现数据溢出的情况,所以需要进行强制转换。