short s1 = 1; s1 = s1 + 1;与short s1 = 1;

1. short s1=1;s1=s1+1;为什么是错的

在进行算法运算的时候,内部CLR的虚拟机只能进行最低32位的运算 也就是int
所以不管你是short+short 还是byte+short 最终都会被提升扩展成Int32 也就是int
也就是说s1+1最后是int型 但左边是s1是short型  很明显一桶水倒到一杯水里会造成数据丢失 所以是错的  
你必须要显示转换才可以


s1 = (short)(s1 = 1);


2.s1+=1;为什么不报错
关于这个+=我以前也是一直认为和x=x+1是等效的 其实还是有区别的
最好的证据就是看反编译后的代码啦 


//Reflector反编译后

short s = 1;

s = (short) (s + 1);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值