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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhang2745387 中级黑马   /  2015-8-6 22:11  /  1837 人查看  /  28 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s = 1;
        s = s + 1;               
        和
        short s = 1;
        s+=1;
               
        有问题吗?为什么呢?

28 个回复

倒序浏览
本帖最后由 白面馅包子 于 2015-8-6 22:16 编辑

当然有问题啊  类型转换问题第一个 s=s+1 右边运算自动提升int类型 左边是short 类型 报错
第二个+=蕴含强制转换 不报错

回复 使用道具 举报
刚来没多久老师就说过这题了
回复 使用道具 举报
第一个:
s=s+1;    s是short类型,整数默认是int类型,运算时会被s提升为int类型,所以结果是short的s 被赋值成了int类型的数,所以报错
第二个
s+=1;    相当于  s = (short)(s+1)     s+1 与上面情况一样,只是结果被强转
回复 使用道具 举报
这就是面试题?
回复 使用道具 举报
这估计是基础班的面试题吧?
回复 使用道具 举报
rxtm 中级黑马 2015-8-7 00:27:08
7#
这题我见过
回复 使用道具 举报
肯定有问题啊, 第一个s=s+1; 直接就编译出错了,因为s+1的时候 1是int类型的 会报错,说可能会损失精度  第二个其实是自动强制类型转换了。
回复 使用道具 举报
赋值操作隐含类型强转
回复 使用道具 举报
第一个上面左边的s是short类型,两个字节16位,s+1后变成16位int值,再赋值给short类型,位数不对,不能赋值,除非强转,下面的表达式默认强转
回复 使用道具 举报
前者 报错  。。后者 不报错。。
s += 1;等价于s = (short)(s + 1);含有强制转换。。
前者1为 int  型数据,所以 从大到小会报错
回复 使用道具 举报
第一要手动转换,否则类型错误,第二个自动强制转换,不报错
回复 使用道具 举报
有问题的
short s = 1;
s = s +1;// s + 1,s自动提升为int类 结果2为int型 无法赋值给左边的short类型s 报损失精度的错误。

short s = 1;
s += 1;// 只要记住:+=、*=、/=等运算具有隐藏的自动强制类型转换的功能,效果同 s = (short)(s+1) 无问题。
回复 使用道具 举报
上边那个编译的时候会报错:损失精度,因为s是short类型的数据,而1是int类型的数据,不能直接相加,需要先把s提升到int类型才行,s+1计算之后是int类型的数据,再赋值给s是需要把这个结果转换成short才能赋值成功;第二个已经隐含了转换类型这个动作,可以成功编译
回复 使用道具 举报
第一个s=s+1系统会默认的将右边的值变为int类型,然后赋给左边的s,因此会出现系统出现精读错误
回复 使用道具 举报
mashasha_hm 发表于 2015-8-8 13:09
这时就业班的面试题吗?

对,就是就业班的面试题,老师讲过的
回复 使用道具 举报
第一个会编译失败,第二个是左右两边同时相加,自动转型
回复 使用道具 举报
第一个右边默认的是int,会报错,第二个是自带强制类型转换
回复 使用道具 举报
来晚了,但是还是要说说,有默认的强制类型转换
回复 使用道具 举报
这题我写错过
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马