a=a+1;的简单问题!
问题:
//////////////
short a=1;
a=a+1;
这个不可以编译通过很好理解,1是int型,a+1的运算结果是int型,不可以强制转换成short型。
///////////////
再看:
///////////////////
short a=1;
a+=1;
这个可以编译通过,为什么?到底a+=1是怎么进行运算的?
/////////////////////
在群里一个刚学C#的人问的,我解决不了。。。5555555555.....
------解决方案--------------------
很简单...+=中的+是根据左操作数类型推断结果类型的,它会自动将默认的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;
是完全一样的...也就是说+=会自动转换类型,但是这种转换只能是可以隐式转换的类型...