日期:2014-05-17  浏览次数:20381 次

这两种写法有什么不同?
short s1=1;

1.  s1=s1+1;
2.  s1+=1;

看别人说的第1种写法有错,第二种正确。
两者本质区别在哪里?

------解决方案--------------------
这也可以 不懂帮顶

错误倒是不至于吧
------解决方案--------------------
这个是面试题吧
我也越到过,纯属扯淡啊,有毛用

 s1=s1+1;这个,s1越到了int转成int相加,然后int要转short,报错了,不能隐士转换

第2个好理解了,+=你就相当于=看待


个人感觉纯扯淡,就是面试时候打击你的题
------解决方案--------------------
s1=s1+1;  会报转化失败,无法从int转向short,因为1默认是int32,所以s1+1结果是int32
这样就左右不等了

至于第二种为啥不报错。。俺也不知道。。。
------解决方案--------------------
第一种写法int转short会出错,第二种转换int后=+,S1为int型,没有到short的转换。个人理解。
------解决方案--------------------
第一个会转换失败。。。
------解决方案--------------------
引用:
不过我在vs2010中试了,两种都可以,都没出错,谁知道原理的,解释一下。

不会吧,你确定是试过,我试了下,第一种明显不能编译通过,第二种才可以

------解决方案--------------------
引用:
Quote: 引用:

不过我在vs2010中试了,两种都可以,都没出错,谁知道原理的,解释一下。

不会吧,你确定是试过,我试了下,第一种明显不能编译通过,第二种才可以
,
恩,恩
------解决方案--------------------
第一种如楼上所说从int到short需要类型转换,存在越界风险。报不报错可能是编译器类型和风险等级决定的
第二种是+=操作符,可能这个1在编译的时候可能会被当作short类型作为入参,或者在+=函数体里面替你做了安全的类型转换
第二种不存在变量拷贝,效率优于第一种
------解决方案--------------------
原因是 微软规定的
http://msdn.microsoft.com/zh-cn/library/ybs77ex4.aspx
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。

short z = x + y; // Error: no conversion from int to short

若要解决此问题,请使用强制转换:

short z = ( short )(x + y); // OK: explicit conversion 

说说我的个人看法:

经常有看到会讨论编译时是怎么样,运行时是怎么样
C#是一种强类型语言,编译前会检查类型是否一致