黑马程序员技术交流社区

标题: 面试题 [打印本页]

作者: zhang2745387    时间: 2015-8-6 22:11
标题: 面试题
short s = 1;
        s = s + 1;               
        和
        short s = 1;
        s+=1;
               
        有问题吗?为什么呢?

作者: 白面馅包子    时间: 2015-8-6 22:12
本帖最后由 白面馅包子 于 2015-8-6 22:16 编辑

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


作者: aa233192133    时间: 2015-8-6 22:20
刚来没多久老师就说过这题了
作者: 晓月残魂    时间: 2015-8-6 22:22
第一个:
s=s+1;    s是short类型,整数默认是int类型,运算时会被s提升为int类型,所以结果是short的s 被赋值成了int类型的数,所以报错
第二个
s+=1;    相当于  s = (short)(s+1)     s+1 与上面情况一样,只是结果被强转
作者: 明月刀割芳草    时间: 2015-8-6 22:23
这就是面试题?
作者: IT老鹰    时间: 2015-8-6 22:26
这估计是基础班的面试题吧?
作者: rxtm    时间: 2015-8-7 00:27
这题我见过
作者: FateYin    时间: 2015-8-7 00:29
肯定有问题啊, 第一个s=s+1; 直接就编译出错了,因为s+1的时候 1是int类型的 会报错,说可能会损失精度  第二个其实是自动强制类型转换了。
作者: 真实姓名被注册    时间: 2015-8-7 00:31
赋值操作隐含类型强转
作者: godboy001    时间: 2015-8-8 09:21
第一个上面左边的s是short类型,两个字节16位,s+1后变成16位int值,再赋值给short类型,位数不对,不能赋值,除非强转,下面的表达式默认强转
作者: STARlove    时间: 2015-8-8 09:47
前者 报错  。。后者 不报错。。
s += 1;等价于s = (short)(s + 1);含有强制转换。。
前者1为 int  型数据,所以 从大到小会报错
作者: keviner    时间: 2015-8-8 10:16
第一要手动转换,否则类型错误,第二个自动强制转换,不报错
作者: xp2015    时间: 2015-8-8 11:13
有问题的
short s = 1;
s = s +1;// s + 1,s自动提升为int类 结果2为int型 无法赋值给左边的short类型s 报损失精度的错误。

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

对,就是就业班的面试题,老师讲过的
作者: lingxia125    时间: 2015-8-8 20:53
第一个会编译失败,第二个是左右两边同时相加,自动转型
作者: 一叶泛舟    时间: 2015-8-8 21:30
第一个右边默认的是int,会报错,第二个是自带强制类型转换
作者: 大头爱傻瓜    时间: 2015-8-8 21:31
来晚了,但是还是要说说,有默认的强制类型转换
作者: 3174918418    时间: 2015-8-8 21:36
这题我写错过
作者: 两木三水    时间: 2015-8-8 22:21
没事逛逛,还是可以学到好多东西的
作者: 黑进制    时间: 2015-8-8 23:02
第一个报错
作者: kenfans    时间: 2015-8-8 23:03
又是类型转换的问题
作者: 徐鹏辰    时间: 2015-8-8 23:16
s = s + 1;      报错   该代码是两步运算,先加和后赋值。s是short类型,1是int类型,当加和时s会类型提升为int,int类型不能赋值为short类型。      

s+=1;      编译通过   是一步运算,不会发生类型转换
作者: MKOSTO    时间: 2015-8-9 00:13
终于遇到我会的题目了
作者: wang949055945    时间: 2015-8-9 00:32
面试还问其他的什么了吗
作者: Holmes    时间: 2015-8-9 09:45
学习了。。。。。。
作者: 肋肋    时间: 2015-8-9 16:37
1报损失精度,2不会~
作者: JustForYou    时间: 2015-8-9 17:38
讲过的题




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