今天一个学生去面试.NET的软件工程师,面试题有这么一道:
short s=0;
s = s + 1;
和
short s=0;
s += 1;
short s=0;
s = s + 1;
和
short s=0;
s += 1;
这两个表达式有什么区别,会报什么错误?
学生不会,我也不会,我的第一反应是这两个语句好像没有什么错误呀,也没什么区别的。
结果在VS2005中一试,第一个编译报错,第二个没有问题。
真的蛮奇怪的,而且觉得出这种面试题的公司也蛮奇怪的
我的理解:
s = s + 1; 由于 1 默认是int型的,s是short的,"s+1"的结果默认是int的,把int的结果赋值给short时会报错,损失精度了,必须写成 s = (short)(s+1) 来强制转化一下
s+=1; 在编译时已经明确最后要赋值给s,即short型的,所以会在内部自动进行转换的 (不知哪位有更好的解释)