A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有知道吗?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 加油喔··

查看全部评分

5 个回复

倒序浏览
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中,不会有数据类型的转换

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
为什么short s1 = 1; s1 = s1 + 1有错,是因为1默认是是int型,相加之后又数据类型的自动提升,相加的结果就变成了int型,int型传给short型就会损失精度。
而 short s1 = 1; s1 += 1 不会出错,是因为+=复合赋值运算符自动地将运算结果转型为short型数据
回复 使用道具 举报
short x=1;1默认是int
这个为什么不报错,因为jvm会自动判断1是否在short的范围,在的话就自动转。不在的话报精度错误
s1 = s1 + 1;发生了运算(简单说就是jvm也不知道怎么运算)没有帮你转。
而s1 += 1; 就像short x=1;时自动帮你转(这个jvm会做)。
回复 使用道具 举报
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;

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
short s1 = 1;
s1 = s1 + 1;'1'是  int类型  一个short 加上一个 int 类型会提升
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马