問題:
//////////////
short a=1;
a=a+1;
這個不可以編譯通過很好理解,1是int型,a+1的運算結果是int型,不可以強制轉換成short型。
///////////////
再看:
///////////////////
short a=1;
a+=1;
這個可以編譯通過,爲什麼?到底a+=1是怎麼進行運算的?
/////////////////////
很簡單...+=中的+是根據左操作數類型推斷結果類型的,它會自動將默認的int型1轉換爲short型1...
short a=1;
a+=32767;//編譯可以通過...
short a=1;
a+=32768;//編譯就不能通過了,而且你注意看錯誤信息,常量值“327678”無法轉換爲“short”...
你可以看一下IL代碼...
short a=1;
a=(short)(a+1);
和
short a=1;
a+=1;
是完全一樣的...也就是說+=會自動轉換類型,但是這種轉換隻能是可以隱式轉換的類型...