1.整型
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2 147 483 648 ~ 2 147 483 647 (正好超过 20 亿) |
short | 2字节 | -32 768 ~ 32 767 |
long | 8字节 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
byte | 1字节 | -128 ~ 127 |
可以为数字字面量加下划线,如用1_000_000(或0b1111_0100_0010_1000_0000)表示一百万。这些下划线只是为了让人更易读。Java编译器会去除这些下划线。
和C++不同,C++的int类型在16位处理器上是2字节,在32位处理器上是4字节,long在32位上是4字节,在64位处理器上是8字节。在Java中,所有数据类型所占的字节数量与平台无关。
注意,Java没有任何无符号(unsigned)形式的int、long、short或byte类型。
2.浮点类型
类型 | 储存需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约±3.402 823 47E+38F(有效位数为6~7位) |
double | 8字节 | 大约±1.797 693 134 862 315 70E+308(有效位数为15位) |
float类型的数值有一个后缀F或f(例如,3.14F。)没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d(例如,3.14D)。
float f = 3.14F; // 没有F会报错
double d =3,14;
double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求。实际上,只有很少的情况适合使用float类型,例如,需要单精度数据的库,或者需要存储大量数据。
注释:可以使用十六进制表示浮点数值。例如,0.125=2^-3可以表示成0x1.0p-3。在十六进制表示法中,使用p表示指数,而不是e。注意,尾数采用十六进制,指数采用十进制。指数的基数是2,而不是10.
所有的浮点数值计算都遵循IEEE754规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
•正无穷大
•负无穷大
•NaN(不是一个数字)
例如,一正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为NaN。
需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
if(x==Double.NaN)
if(Double.isNaN(x))
not a number
警告:浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1)将打印出0.8999999999999999,而不是人们想象的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。这就好像十进制无法精确地表示分数1/3—样。
如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。
3.char类型
用单引号括起来
转义序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\" | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
4. boolean 类型
boolean (布尔)类型有两个值:false 和 true, 用来判定逻辑条件,整型值和布尔值之间不能进行相互转换。
5.数据类型转换
实心箭头表示无信息丢失的转换,虚线箭头表示可能有精度损失的转换。
如:
int n = 123456789;
float f = n; // f is 1.2345678E8
强制类型转换:
double x = 9.997;
int nx = (int) x;
四舍五入:
double x = 9.997;
int nx = (int)Math.round(x);
其中Math.round返回类型为long。