黑马程序员技术交流社区

标题: 为什么short s1 = 1; s1 = s1 + 1有错?而 short s1 = 1; s1 += 1 不会出错? [打印本页]

作者: 朱晓辉    时间: 2012-5-12 18:57
标题: 为什么short s1 = 1; s1 = s1 + 1有错?而 short s1 = 1; s1 += 1 不会出错?
有知道吗?
作者: 魏涞    时间: 2012-5-12 19:10
short s1 = 1;
s1 = s1 + 1; //这里一个short型数据和1(int型)进行运算,会自动提升数据类型,变为int型,再和1进行运算,结果为int类型,
             //一个int类型数据要赋值给short类型,要用显示类型转换,改为s1=(short)(s1+1);
short s1 = 1;
s1 += 1;    //这里是s1自身进行+1运算,会直接在s1的值+1后存到s1中,不会有数据类型的转换

作者: 张成龙    时间: 2012-5-12 19:16
为什么short s1 = 1; s1 = s1 + 1有错,是因为1默认是是int型,相加之后又数据类型的自动提升,相加的结果就变成了int型,int型传给short型就会损失精度。
而 short s1 = 1; s1 += 1 不会出错,是因为+=复合赋值运算符自动地将运算结果转型为short型数据

作者: 黑马张立国    时间: 2012-5-12 19:23
short x=1;1默认是int
这个为什么不报错,因为jvm会自动判断1是否在short的范围,在的话就自动转。不在的话报精度错误
s1 = s1 + 1;发生了运算(简单说就是jvm也不知道怎么运算)没有帮你转。
而s1 += 1; 就像short x=1;时自动帮你转(这个jvm会做)。
作者: It's_Zero    时间: 2012-5-12 21:47
s1=s1+1;
的类型示意  [short] s1 = [short] s1 + [int] 1;  当  short遇到int 是不是会向上转换为 int所以变为[short] s1 = [int] s1 + [int] 1;
俩 int 型的数加完后 又赋值给short 型的, java是不能自动向下转换的 ,所以要将结果转成short型的 s1 = (short)( s1+1 );

而 s1+=1; 不需要进行类型转换  就好比 s1 = [short] s1 + [short] 1;
作者: 康大玮    时间: 2012-5-12 22:18
short s1 = 1;
s1 = s1 + 1;'1'是  int类型  一个short 加上一个 int 类型会提升




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2