C#教程(4)———— 基本数据类型转换
前言
在之前的文章中,我们介绍了各种数据类型,不过,就像我们不能把性格不合的两个人硬凑在一起让他们原地结婚一样,在程序中我们也不能让两个不同的数据类型强行在一起进行运算,那么就势必会涉及到不同数据类型转换,那么如何进行转换,转换的前提条件又是什么呢?
1 数据类型转换
数据类型转换其实就是将一种数据类型转变成另一种数据类型的过程,在实际的运算过程中,我们经常会遇到各种各样的数据类型转换问题,因为在C#中,不同的数据类型实际上是没办法直接放在一起进行运算的,比如一个int类型的整数是无法直接和float类型的小数做加法的,必须要经过一次数据类型转换,将两者转变为同一类型,比如:
int intNum = 10;
float floatNum = 5.5f;
float max = intNum + floatNum;
在上面的代码片段中,系统在进行运算时,其实是将int类型的“intNum”变量转变为float类型后,才和“floatNum”进行了加法运算,而有趣的是,如果将这三行代码进行修改。
int intNum = 10;
float floatNum = 5.5f;
int max = intNum + floatNum;//本行报错
上面的这个代码片段,将会在第三行加法那里产生报错,报错信息为"无法将类型‘float’隐式转换为‘int’。存在一个显式转换(是否缺少强制转换)"。
在上面的这一段报错信息中,就出现了三个新的名词:隐式转换、显式转换、强制转换,那么他们分别是什么意思呢?又该如何使用呢?
1.1 隐式转换
1.1.1 隐式转换介绍
C#中数据类型的转换一共有两种方式,隐式转换是第一种,也是相对比较安全的一种,这种转换方式是C#默认的以安全的方式进行的转换,不会产生数据的丢失。
也就是说,隐式转换这种转换方式是由C#自发完成的,并不需要我们程序员进行额外的说明或标记,比如如下代码片段:
byte byteValue = 5;
short shortValue = byteValue;
int intValue = shortValue;
long longValue = intValue;
在上面的代码片段中,我们可以清楚的看到一共经过了三次数据类型的转换,第一行是定义了一个byte类型变量,第二行我们将byte类型变量变成了short类型变量,第三行是将short类型变量转换为了int类型变量,第四次是将int类型转换为了long类型变量。而在这三次类型转换中,我们并没有进行任何的额外标注,这里需要进行数据类型转换等,一切都是C#语言自动在进行转换,所以成为隐式转换。
那如果我们将其中两句反过来会发生什么呢?
short shortValue = 5;
byte byteValue = shortValue;//报错:无法将类型‘short’隐式转换为‘byte’。存在一个显式转换(是否缺少强制转换)
熟悉的报错信息又一次出现了,也就是说从short转变到byte类型的转换我们无法像前面那样直接隐式转换实现了,那么大家有没有发现什么规律呢?回忆下我们教程第二篇中,介绍的各种数据类型的字节数。
也许有人发现了,是的,在之前的例子中,我们能完成隐式转换的时候,都是要转换的变量的数据类型字节数小于要转换到的数据类型的字节数,也就是说,隐式转换只适用于字节数小的转向字节数大的么?
也许事实并没有那么的简单。
1.1.2 隐式转换的条件
在上面的文章中我们得到了一个结论“隐式转换只适用于字节数小的转向字节数大的情况”,但真相往往没有那么简单。
float floatValue = 10;
long longValue = floatValue;//报错:无法将类型‘float’隐式转换为‘long’。存在一个显式转换(是