public class Demo{ float func1() { int i=1; return; } float func2() { short i=2; return i; } float func3() { long i=3; return i; } float func4() { double i=4; return i; } }
数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中 “ 悄然 ” 进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。
自动数据类型转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低 ---------------------------------------------> 高
byte,short,char-> int -> long -> float -> double
运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:
操作数 1 类型 | 操作数 2 类型 | 转换后的类型 |
byte 、 short 、 char | int | int |
byte 、 short 、 char 、 int | long | long |
byte 、 short 、 char 、 int 、 long | float | float |
byte 、 short 、 char 、 int 、 long 、 float | double | double |
强制数据类型转换
long 型在32位下,长度为4字节,表示范围为-2147483648~2147483647
在64位下为8字节,范围为-9223372036854775808~9223372036854775807
也就是9.2E18
而float 范围是 -3.4E-38 和 3.4E+38
明显,不论哪种long数据转为float的时候都不存在溢出的情况,唯一问题就是精度丢失。
所以 long转为float就是按值转换,通过降低精度的方式,把值赋值给float。