隐式类型转换
隐式类型转换式是从范围小的数据类型转换成范围大的数据类型,是由编译器以安全的方式自动执行的。
隐式转换主要是整数类型到浮点类型转换示例代码如下:
int a = 100;
double d = a; //将int类型转换为double类型
float f = 3.14f;
d = f; //将float类型转换为double类型
隐式数值转换包括以下几种:
1、从 sbyte 类型到 short,int,long,float,double,或 decimal 类型。
2、从 byte 类型到short,ushort,int,uint,long,ulong,float,double,或decimal类型。
3、从 short 类型到 int,long,float,double,或 decimal 类型。
4、从 ushort 类型到 int,uint,long,ulong,float,double,或 decimal 类型。
5、从 int 类型到 long,float,double,或 decimal 类型。
6、从 uint 类型到 long,ulong,float,double,或 decimal 类型。
7、从 long 类型到 float,double,或 decimal 类型。
8、从 ulong 类型到 float,double,或 decimal 类型。
9、从 char 类型到 ushort,int,uint,long,ulong,float,double,或 decimal 类型。
10、从 float 类型到 double 类型。
显示类型转换
显示类型转换将对象强制转换成另一个类型。
虽然有时候不得不使用强制类型转换,但其实这种方法是非常危险的。
举例如下:
1 long dbl_num = 12345678;
2 int k = (int) dbl_num ;//此处运用了强制转换
将双精度浮点型(double)强制转换成整型(int),如果表达式是:int k=(int) dbl_num; 编译器会执行隐式转换,但是会因为这是大数据类型转换成小数据类型不符合隐式转换的规则而报错,要在赋值对象中加上(int)告诉编译器此处运用强制转换。
在使用显示转换中非常危险的情况是大数据类型里的值转换到小数据类型,但小数据类型装不下超出范围的值就会导致数值严重失准。
列子如下:
long dbl_num = 12345678910;
int k = (int)dbl_num;//此处运用了强制转换
当db1_num(long类型)中的值强制转换成k(int类型)的值,int类型的k装不下(long类型)db1_num中的值编译器不会提醒报错,只有在打印输出的时候看到结果严重失准(上代码运行结果:-2147483648)。
要想安全的使用强制类型转换必须对涉及类型和编译器实现转换过程都非常了解。