类型转换
short s1 = 1; s1 = s1 + 1L;与short s1 = 1; s1 += 1L;
为何前者会出错,而后者不会?原因如下:
第一种方式:
short s1 = 1; s1 = s1 + 1;需强行转化自动类型提升:当分析表达式时,C/C++/Java会自动提升各个byte 型或short型的操作数到int 型。
根据自动类型提升,我们知道,s1 (short型)+ 1(int型),结果为(int),将int赋值给short,会损失精度,当然不可以了。
第二种方式:
short s1 = 1; s1 += 1;(可以正确编译)
自加没有自动类型提升问题
由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;
参考:http://topic.csdn.net/u/20080709/21/0f035f88-752f-4284-a454-fabbdee802e2.html
浙公网安备 33010602011771号