Java是一种强类型语言,必须为每一个变量声明一种类型。Java共包含8中基本类型,其中4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
整型
整型用于表示没有小数部分的数值,但是允许是负的。Java包含4种整型:
- int:4字节
- short:2字节
- long:8字节
- byte:1字节
长整型数值有一个后缀L(如,999999999L)。十六进制有一个前缀0x(如,0xabc)。八进制有一个前缀0,例如011表示八进制中的9。
从Java 7开始,加上0b可以表示二进制数,例如0b101就是5。另外可以为数字字面量添加下划线(_)。如1000_000表示一百万。加下划线只是为了易读。
浮点数
浮点数表示有小数部分的数值。在Java中有两种浮点类型:
- float:4字节
- double:8字节
double表示的数值精度为float的两倍。在实际开发中,大部分情况下使用double而不使用float。
float类型有一个的数值后缀F或f或D(如,1.72F)。在没有后缀F的浮点数值(如,1.72)默认为double类型。
三个表示溢出和出错情况的三个特殊的浮点数:
- 正无穷大 Double.POSITIVE_INFINITY
- 负无穷大 Double.NEGATIVE_INFINITY
- NaN(不是一个数),判断“非数值”,可以使用Double.isNaN方法
char类型
char类型用于表示字符常量。例如:'A'是编码为65所对应的字符常量。而"A"表示一个包含字符A的字符串。Unicode编码单元可以表示为十六进制,其范围从u0000到uffff。除了采用转义序列符u表示Unicode代码单元的编码之外,还有一些表示特殊字符的转义序列符,(如,退格, 换行等)。
boolean类型
boolean类型有两个值:false和true。用来判断逻辑条件。整型值和boolean值之间不能进行相互转换。
数值类型之间的转换
在程序运行时,经常要将一种数值类型转换为另一种数值类型。
图中是实心箭头表示无信息丢失的转换;虚箭头表示可能有精度损失的转换。当两个不同类型的数据进行计算时,先要将两个操作数转换为同一种类型,然后再进行计算。
- 如果两个操作数中有一个double类型,另一个操作数就会转换为double类型。
- 否则,如果其中一个操作数为float类型,另一个操作数就会转换为float类型。
- 否则,如果其中一个操作数是long类型,另一个操作数就会转换为long类型。
- 否则,两个操作数都将被转换为int类型。
强制类型转换
在必要的时候,int类型会自动转换为double类型。但另一方面,有时也需要将double转换为int。Java允许这种数值之间的类型转换。这种转换有可能丢失一些信息,在这种情况下,需要通过强制类型转换实现这种操作。
double x = 9.8; int n = (int)x;
这样,变量n的值为9。强制类型转换通过截取小数部分将浮点值转换为整型。
如果对浮点数进行舍入运算,以便得到最接近的整数,可以使用Math.round方法:
double x = 9.8; int n = (int)Math.round(x);
这样,变量n的值为10。当调用round时,仍然需要调用强制类型转换。因为round方法返回的结果为long类型。