首先看下面一段代碼
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。