基本类型容量
java中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围
- byte:字节型,占内存容量为 1 个字节(8 位),表示范围为 -128(-2^7)到 127(2^7-1)。
- short:短整型,占内存容量为 2 个字节(16 位),表示范围为 -32,768(-2^15)到 32,767(2^15-1)。
- int:整型,占内存容量为 4 个字节(32 位),表示范围为 -2,147,483,648(-2^31)到 2,147,483,647(2^31-1)。
- long:长整型,占内存容量为 8 个字节(64 位),表示范围为 -9,223,372,036,854,775,808(-2^63)到 9,223,372,036,854,775,807(2^63-1)。
- float:单精度浮点型,占内存容量为 4 个字节(32 位),表示范围约为 ±3.4E-45(±1.18e-38)到 ±3.4028235E38(±1.0x10^38)。
- double:双精度浮点型,占内存容量为 8 个字节(64 位),表示范围约为 ±4.9E-324(±1.17e-308)到 ±1.8014398E+308(±9.2x10^308)。
- char:字符型,占内存容量为 2 个字节(16 位),表示范围为 '\u0000'(0)到 '\uffff'(65,535)。
- boolean:布尔型,占内存容量为 1 个字节(8 位),表示范围为 false(0)和 true(非零)。
自动类型转换
根据数据容量和范围,小的数据类型可以转换为大的数据类型
比如:
int b = 1;
double c = b;
但是大的范围转为小的数据类型就会导致精度丢失
比如:
double a = 1.0;
int b = a;
整形的数据在进行计算的时候会转换为int类型去进行计算 同时要注意的是不要超过类型的数值范围
可自动关系转换图谱
强制类型转换
这种可以使多大范围的强制转换为小范围的,但是如果范围超了会导致精度丢失
double a = 1.0;
int b = (int) a;
当大范围的数值被强制转换为小范围的数值时,其精度可能会受到影响。以double和int为例,如果将一个double类型的值强制转换为int类型,那么小数部分将被直接截断,而不是四舍五入。因此,如果你有一个带有小数部分的double值,如3.14,在强制转换为int类型后,你将得到3,而不是3.14的整数部分3。
为了处理这种精度损失,你可以在强制类型转换前使用四舍五入的方法将float类型值转换为int类型值。具体代码如下:
float f = 3.14; int i = ( int )(f + 0.5); // 四舍五入。
这样可以保证转换后的int类型值更加准确。