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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xing260577315 中级黑马   /  2014-8-31 18:18  /  2048 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 +=1;有什么错?求高手详细解答

9 个回复

倒序浏览
1是int型数据,s1+1运算时,s1也会被提升为int型,然后和1做加法运算,也就是说s1+1运算完的结果是int型数据,自然不能赋值给short变量,可以写成s1=(short)(a+1)
而s1+=1中,java会自动完成类型转换,所以不会报错。
回复 使用道具 举报
李天富 发表于 2014-8-31 19:13
1是int型数据,s1+1运算时,s1也会被提升为int型,然后和1做加法运算,也就是说s1+1运算完的结果是int型数 ...

回答的好专业啊
回复 使用道具 举报
前者错误,后者没错吧。short s1 =1;因为s1是short类型的1。s1 =s1+1;这句的意思是s1+1的值再赋给s1,而s1+1时,1是int型,所以此时s1值自动强转为int型,s1+1的结果成了int型,将int的和赋值给类型为short的s1,自然就出错了。
回复 使用道具 举报
李天富 发表于 2014-8-31 19:13
1是int型数据,s1+1运算时,s1也会被提升为int型,然后和1做加法运算,也就是说s1+1运算完的结果是int型数 ...

s1+1前面如果加一个short是将int型的强制转换吗?是不是需要用一个int的变量去接收
回复 使用道具 举报
本帖最后由 李天富 于 2014-9-2 01:28 编辑
xing260577315 发表于 2014-9-1 21:21
s1+1前面如果加一个short是将int型的强制转换吗?是不是需要用一个int的变量去接收 ...

用毕老师的那个例子说吧。short相当于2两的碗,int相当于4两的碗,4两饭自然不能装到2两的碗里,你必须找一个更大的碗,比如4两的(int)或者更大的8两的(long)。。前面加(short)的意思就是把所得int型数据转化为了short型,然后再赋值给short型变量。这里的转化其实就是取了所得int型数据的末16位(两个8位)。你可以试一下这个,s1=(short)(s1+400000),这样也不报错,但是结果不是400001,而6785,你可以自己试一下。
回复 使用道具 举报
楼主太给力了
回复 使用道具 举报
6L已经够详细了 就是一个强制被转换了类型之后变大了short装不了了
回复 使用道具 举报
李天富 发表于 2014-9-2 00:53
用毕老师的那个例子说吧。short相当于2两的碗,int相当于4两的碗,4两饭自然不能装到2两的碗里,你必须找 ...

恩 谢谢  是我想错了  是用short型的去接收,谢谢解答
回复 使用道具 举报
涉及到char,int,short类型数据运算时,会自动提升为int型进行计算,然后得到int型的结果,s1=s1+1首先将右边的s1提升为int型,然后加一,得到int型的值,想要赋给short型的s1,当然会发生精度丢失。而对于s1+=1来说,底层会自己做类型转换,不用担心,没错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马