基础知识:一个字节=8bit(8位)
一个字节的内存模型为:
1、整数型:
byte:1个字节,存储范围:-128~127 即:-(2^(1 * 8 - 1)+1) ~ 2^(1 * 8 - 1)
short:2个字节,存储范围:-32768~32767 即:-2^(2 * 8 - 1) ~ (2^(2 * 8 - 1)-1)
int:4个字节,存储范围:-2147483648~2147483647 即:-2^(4 * 8 - 1) ~ (2^(4 * 8 - 1)-1)
long:8个字节,存储范围:........... 即:-(2^(8 * 8 - 1)+1) ~ 2^(8 * 8 - 1)
2、浮点数类型:
float:4个字节
double:8个字节
浮点数特别说明:
3、单字符:
char:2个字节
char b = "a" + 1;// 和char b = "b"一样的;
上述运算中,首先是将"a"转换成相应的ASCII码值:95,然后再和1相加
因此,在java中,对char进行运算的时候,是直接当作ASCII码对应的整数来运算的。
扩展:中文字符对应的码表叫:Unicode,也和ASCII码类似。char c = "字";
另外
1)数据类型是可以自动从高精度向低精度转换,反之则不行
即:byte<--short<--int<--long<--flot<--double
eg:int a = 1.2;// 编译器会报错(精度丢失错误)
double b = 2;//编译器通过
2)在java中,默认小数是double类型,
float c = 1.2;//编译器会报错(精度丢失错误)
float c = 1.2f;//这样编译器就不报错了
3)想将高精度转换成低精度,也是有办法的:强制转换
eg: int a = (int)1.2;
4)对于如下式子:int a = 1 + 1.2f + 3.4
在右边运算过程中,会自动将低精度的转换成高精度的类型进行运算,最后再将小数位丢失掉,得到结果为5