黑马程序员技术交流社区

标题: 基本数据类型之short [打印本页]

作者: xing260577315    时间: 2014-8-31 18:18
标题: 基本数据类型之short
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 +=1;有什么错?求高手详细解答

作者: 李天富    时间: 2014-8-31 19:13
1是int型数据,s1+1运算时,s1也会被提升为int型,然后和1做加法运算,也就是说s1+1运算完的结果是int型数据,自然不能赋值给short变量,可以写成s1=(short)(a+1)
而s1+=1中,java会自动完成类型转换,所以不会报错。
作者: 28了还能学吗    时间: 2014-8-31 19:17
李天富 发表于 2014-8-31 19:13
1是int型数据,s1+1运算时,s1也会被提升为int型,然后和1做加法运算,也就是说s1+1运算完的结果是int型数 ...

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

s1+1前面如果加一个short是将int型的强制转换吗?是不是需要用一个int的变量去接收
作者: 李天富    时间: 2014-9-2 00:53
本帖最后由 李天富 于 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,你可以自己试一下。

作者: 君行    时间: 2014-9-2 02:11
楼主太给力了
作者: 默默丶    时间: 2014-9-2 08:34
6L已经够详细了 就是一个强制被转换了类型之后变大了short装不了了
作者: xing260577315    时间: 2014-9-2 09:27
李天富 发表于 2014-9-2 00:53
用毕老师的那个例子说吧。short相当于2两的碗,int相当于4两的碗,4两饭自然不能装到2两的碗里,你必须找 ...

恩 谢谢  是我想错了  是用short型的去接收,谢谢解答
作者: 隔夜修书    时间: 2014-9-2 10:16
涉及到char,int,short类型数据运算时,会自动提升为int型进行计算,然后得到int型的结果,s1=s1+1首先将右边的s1提升为int型,然后加一,得到int型的值,想要赋给short型的s1,当然会发生精度丢失。而对于s1+=1来说,底层会自己做类型转换,不用担心,没错。




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