这两种写法有什么不同?
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的转换。个人理解。
------解决方案--------------------第一个会转换失败。。。
------解决方案--------------------
不会吧,你确定是试过,我试了下,第一种明显不能编译通过,第二种才可以
------解决方案--------------------,
恩,恩
------解决方案--------------------第一种如楼上所说从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#是一种强类型语言,编译前会检查类型是否一致