首先看下面一段代码
- byte x = 1;
- byte y = 2;
- byte z = x + y;
- Console.WriteLine(z);
可能很多人会说显示结果是 3。
其实,这段代码无法运行,因为编译就不通过报错,错误原因:错误 1 无法将类型 "int" 隐式转换为 "byte"。存在一个显式转换 (是否缺少强制转换?)
因为,byte 类型之间运算会隐式转换成 int 类型,然后对 int 类型值进行运算,得到的结果是 int 类型,所以直接用 byte 类型变量保存结果会报错。实际上 short 和 char 类型相互运算操作也做这样的处理。之所这样设计,可能 byte、short 和 char 类型相互运算操作,数值可能会发生溢出错误,所以在运算的时候直接都转换为 int 来运算,达到强制结果用 int 类型保存。
如果认为运算后结果不会溢出的情况,可以显式保存结果
- byte x = 1;
- byte y = 2;
- byte z = (byte)(x + y);
- Console.WriteLine(z);
再看下面这段代码
- byte z = 1 + 2;
- Console.WriteLine(z);
在 vs 上编译和运行没问题的,结果是 3。
1+2 是常量运算,得到的就是 3,然后赋值给 z。
来源: http://www.bubuko.com/infodetail-1953678.html