【原创】JAVA数值类型强制类型转换扩展

2023-10-18 16:49:43 浏览数 (1)

前言

 经常需要将一些数值类型转换为另外一种数值类型。下图给出了数值类型之间的合法转换。

数值型数据类型

 在上图中有6个实线箭头,表示无信息丢失的转换;另外有3个虚线箭头,表示可能有精度损失的转换。例如,123456789是一个大整数,它包含的位数多于float类型所能表示的位数,将这个整数转换为float类型时,数量级时正确的,但时会损失一些精度。

代码语言:javascript复制
int n = 123456789;
float f = n; //f 的值为1.234567892EB

 当用一个二元运算符连接两个值时(例如 n f,n是整数,f是浮点数),先要将两个操作数转换为同一类型,然后在进行计算,通常为小类型转换为大类型。(如浮点型和整数进行连接时,最终的返回值为浮点型)。

 其中七大数值型数据类型分别为:   整数型:byte、short、int、long   浮点型:float(单精度)、doubles(双精度)   字符型:char  各数值型占用内存大小:   1byte = 8bit   1short = 2byte = 16bit   1int = 4byte = 2short = 32bit   1long = 8byte = 4short = 2int = 64bit   1float = 4byte = 32bit   1double = 8byte = 2float = 64bit   1char = 2byte = 16bit

 数值型数据进行拼接时的规则:

  • 如果两个操作数中有一个是double类型,另外一个操作数就会转换为double类型。
  • 否则,如果其中一个操作数是float类型,另外一个操作数就会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另外一个操作数将会转换为long类型。
  • 否则,两个操作数都会被转换为int类型。

数值型强制类型转换

 在必要的时候,int类型的值会自动转换为double类型。但另一方面,有时我们也需要将double类型转换成int类型。在Java中允许这种数据类型的转换,不过可能会丢失一些信息。这种转换要通过强制类型转换来实现,强制类型转换的语法格式是在原括号中指定想要转换的目标类型,后面紧跟需要转换的变量名或者常量。例如:

代码语言:javascript复制
 double x = 9.997;
 int nx = (int) x;  //nx的值为9

 这样,变量nx的值为9,因为强制类型转换通过截取小数部分将浮点值转换为整型。如果想将一个浮点型转换为整型时进行舍入,可以使用 Math.round() 方法来实现,例如:

代码语言:javascript复制
 double x = 9.997;
 int nx = (int) Math.round(x);  // nx的值为10

 调用round()方法时,仍需强制类型(int)转换,原因是round()方法返回的是一个long类型,由于存在信息丢失的可能性,所以只有通过一个显式的强制类型转换才能将一个long类型值赋值给int类型的变量。

0 人点赞