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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1黑马币
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?大神们讲解下呗{:2_30:}

43 个回复

倒序浏览
需要强制类型
回复 使用道具 举报
大神能详细说明下,此类型题的解法吗?
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1;编译时程序会报错,因为默认整数类型是int类型,,s1和1进行运算时,会先将s1自动类型提升为int类型再与1进行运算,得到的结果是int类型,将一个int类型的数直接赋值给short类型的s1,,会损失精度,s1接不住,
解决办法,
加强制转换,short s1 = 1; s1 = (short)(s1 + 1);
回复 使用道具 举报
short s1 = 1; s1 += 1;没有错误
因为运算符参与运算的时候会自动加强制转换符.也就是说s1 += 1等效于s1 = (short)(s1 + 1);
回复 使用道具 举报
lennycxy 来自手机 中级黑马 2016-3-27 09:31:19
地板
长姿势了,加油
回复 使用道具 举报
short s1=1;s1=s1+1;这里的s1+1自动提升为Int类型了,原来的s1是short比int小要抢转,后面的应该是系统会自动帮你加强转符号吧,类似s1++
回复 使用道具 举报
1-Short s1=1 中s1是short类型的 ,1是int类型的 ,当数据类型小的向数据类型大的转换时,系统会进行隐式转化,但是,s1=s1+1中 s1+1需要进行强制转换成short类型的 也就是s1=(short)(s1+1);
第二句没错s1+=1中系统默认给进行了强转
回复 使用道具 举报
因为1是一个整数,在JAVA中整数是默认为 int 类型的
前者(short s1 = 1; s1 = s1 + 1;)错在s1 = s1 + 1;这一步,这是一个short类型和int类型的相加,会自动提升为int类型相加,但却赋值给short类型的s1 ,这会损失精度。因为错误。
后者(short s1 = 1; s1 += 1;)中的s1 += 1;会自动添加强转符号,故不错误
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1;编译时程序会报错,因为默认整数类型是int类型,,s1和1进行运算时,会先将s1自动类型提升为int类型再与1进行运算,得到的结果是int类型,将一个int类型的数直接赋值给short类型的s1,,会损失精度,s1接不住, 解决办法, 加强制转换,short s1 += 1; s1 = (short)(s1 + 1);
回复 使用道具 举报
我要多多学习   加油啦
回复 使用道具 举报
前一个损失精度;后一个没错
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1; 整数系统默认是int型,因为short类型和int类型相加是要提升为int,再赋值给short类型数据可能会损失精度,需要加强转符 s1=(short)s1+1;而s1 += 1会自动加强转符,相当于s1=(short)s1+1;所以第二个不报错。
回复 使用道具 举报
chao1 中级黑马 2016-3-27 21:38:03
14#
第一个:s1是short型,而1是int型,s1+1会自动提升为int型,相加完成后再赋值给s1会损失精度.
回复 使用道具 举报
s1 += 1
/Reflector反编译后
short s = 1;
s = (short) (s + 1);
回复 使用道具 举报
Ak-47 中级黑马 2016-3-28 01:01:17
16#
谢谢楼上的,有点懂了
回复 使用道具 举报
(1)s1 = s1 + 1
在计算时,会首先将short类型的s1转换成int型数据和1进行相加运算,结果为int型,赋值给左边short型的变量s1会出现类型转换错误。
(2)s1 += 1
不会出错,因为使用+= 时,java自带类型转换机制
回复 使用道具 举报
1默认是整形,short参与运算时,会上转为int类型,因此结果s1是整型的,而s1定义为short型,因此会出现精度损失错误!
回复 使用道具 举报
fanxiaolin 来自手机 中级黑马 2016-3-28 17:18:54
19#
因为1是int类型!  去官网下视频看。快去学习,别水贴了
回复 使用道具 举报
s1 = s1 + 1这行代码中的s1是变量,1系统在编译过程中不知道他在不在short范围中,2,s1是一个short类型和后面1相加的话会全部提升会int类型,把int类型赋给short会损失精度.而对于s1+=1,这个的实质是s1=(short)(s1 + 1),强制把s1+1转出short这样就符合规则了
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马