Java中整数型与浮点数等数据类型的使用细节
Java中整数型与浮点数等数据类型的使用细节
各类型所占大小
类型 | 字符数 |
---|---|
byte | 1字节 |
char | 2字节 |
short | 2字节 |
int | 4字节 |
float | 4字节 |
long | 8字节 |
double | 8字节 |
boolean | 至少1字节 |
从Java7开始,加上前缀0b或者0B就可以写二进制数,0b1001表示9。
一个byte的值b可以不表示范围-128-127,如果表示0-255,也可以使用byte
下面的这种情况,没有出现我们期望的0.9,主要原因是浮点数采用二进制系统表示,在二进制系统中无法精确表示1/10,就好像十进制无法表示分数1/3一样。所以这种情况我们 使用大数表示。https://moonshuo.cn/posts/30946.html
整数型
首先Java中默认的整数型为int数据类型,其取值范围为2^31-1——-2^31,而其中long类型的取值范围为2^63-1——-2^63,如果运行以下一段程序,会出现值损失的情况,是因为long表示的数据范围大于int可表示的数据范围,int的类型值存储不了long类型的值。
1 | public class Test { |
但是对于byte类型或者short类型的数据赋值给int类型,则其最终的类型为自动升级为更加高级的int类型
浮点型
浮点数=符号位+指数位+尾数位(尾数部分可能会包括不了全部的尾数,会造成精度损失,小数都是近似值),在浮点型中分为double型与float类型,而Java默认的使用double类型,如果想要使用float类型,必须在数的最后加上f,表示这是一个单精度浮点数,否则会发生值损失错误。运行以下程序,会发生信息报错。而如果在10.2后面加上f,则不会报错。
1 | public class Test { |
这是因为不加上f,表示double型的数据10.2赋值给float类型的a,由大转小会损失,而加上f之后,就是将float类型赋值给float类型,不会发生值损失。
浮点型科学计数法的表示,例如int a=5.12e2,表示5.12*(10^2)=512
1 | public class Test { |
浮点型使用中常见的陷阱问题,从数学的角度来看,a与b应该完全相等的,但是计算机算出并不是相等,是因为计算机并不快速识别出8.1后面是否还有其他数值,所以计算机选择进行无限接近算出结果。所以并不建议用浮点型除法进行大小比较运算,如果真的要进行比较,通常在计算机中在某个精度范围内进行比较,不超过某个精度,即认为其相等。
1 | public class Test { |
字符类型
用单引号引出,并且其中只能包含一个字符,而对应的转义字符也表示一个字符,占据一个符号位,即char类型如果包含转义字符,就不能包含其他字符了。
1 | public class Test { |
在Java中char的本质是一个整数,在输出时,是unicode对应的字符,例如a对应的字符编码为97,张的Unicode的对应的编码为24352,运行以下程序
1 | public class Test { |
布尔类型
布尔类型取值只允许取值为true与false,而且仅仅只占有一个字节。