黑马程序员技术交流社区

标题: s+=2,和s=s+2有什么区别 [打印本页]

作者: q491039826    时间: 2015-8-29 23:42
标题: s+=2,和s=s+2有什么区别
short s=2的情况下
作者: Florida2015    时间: 2015-8-29 23:53
没有区别,就是两个格式看起来不一样
作者: 牛小爽    时间: 2015-8-30 00:38
s+=2  在short类型下,它会强制转换成short类型

而s=s+2 会是一个int类型
作者: zx0210    时间: 2015-8-30 02:25
s=s+2编译的时候会报错!!
作者: suichuan689    时间: 2015-8-30 13:27
自动类型转换问题
作者: alogol    时间: 2015-8-30 14:03
本帖最后由 alogol 于 2015-8-30 14:34 编辑

s=s+2 编译的时候会出错
s+=2 不会
short类型与int类型相加,short类型会自动提升成int,所以 s+2 的值为int类型,把int类型的值赋给short类型的 s 会损失精度,因此直接写 s=s+2 会报错,但是写成 s+=2 的话会默认进行自动的类型转换,把 s+2 的结果强转成了short(即使损失精度),所以不会报错


作者: 地狱里的帅灵魂    时间: 2015-8-30 14:05
牛小爽 发表于 2015-8-30 00:38
s+=2  在short类型下,它会强制转换成short类型

而s=s+2 会是一个int类型

对 ,就是这个样子的
作者: dddlinux    时间: 2015-8-30 14:09
s+=2 可以这么写,s = (short)(s+2);而如果不这么写的话,右边是int类型值,左边是short,直接赋值编译会报错的
作者: marcojam    时间: 2015-8-30 15:08
s+=2会强制提升类型
s =s+2不会强制转型,因此报错
作者: BlackHorse001    时间: 2015-8-30 17:10
s+=2具有默认强制类型装换功能,如题,2为int型数据,s为short型,s+=2不会报错,s=s+2就会报错(s+2自动升级为int型),说数据溢出,将int型赋值给short型。
作者: forjunjian    时间: 2015-8-30 17:28
s=s+2;  s会提升为int类型运算后赋值给s ,因为s的数据类型为short,从int类型赋值给short,所以会提示出错。
S+=2;  和上面一样,但运算结果会强制转换为等号左边的数据类型。
作者: 哈哈哈欠虫    时间: 2015-8-30 21:14
s=s+2中s在相加时会自动向上转型为int型
作者: zhanglang    时间: 2015-8-30 21:16
s=s+2会报错。这里2默认为int类型。s+=2中包涵强制转换。可以编译
作者: STARlove    时间: 2015-8-30 21:26
这个问题。。。貌似见过,,呦。。。又貌似没见。。。。。。。。
作者: MengYa    时间: 2015-8-30 21:35
s+=2有强制转换,而s=s+2没有
作者: wdj    时间: 2015-8-30 21:49
前者系统会默认有自动类型转换,而后者没有s+2之后会自动转换为int类型而s为short类型,所以会出错。
作者: yz112069947    时间: 2015-8-30 21:51
要考虑精度转换,S+=2 会有自动类型提升
作者: a6658637    时间: 2015-8-30 21:54
第一种情况会编译成功,第二种情况会编译失败
作者: 不忘初心、    时间: 2015-8-30 22:00
没啥区别,当s=2时。。。
作者: 疯狂的小豆丁    时间: 2015-8-30 22:07
说白了就是一个会强制转换类型,一个不会
作者: 坏寒    时间: 2015-8-30 22:23
太棒,了 赞一个
作者: 小二阳    时间: 2015-8-30 23:18
s+=2  在short类型下,它会强制转换成short类型

而s=s+2 是short 类型加上一个int类型,结果还是一个int类型
作者: Glc90    时间: 2015-8-30 23:21
区别 s+=2是对的 s=s+2报错,因为short+2最终结果会是int  大类型到小类型 会报错
作者: 代晃    时间: 2015-8-30 23:40
这是考类型转换  += 类型会自动提升
作者: 平爷    时间: 2015-8-30 23:46
一个带强制转换 一个没有
作者: MilesMatheson    时间: 2015-8-30 23:59
小伙子,这个问题你已经问了很多遍了,,,,,,,,,,,这种锲而不舍的求知的精神让人折服
作者: 不想睡    时间: 2015-8-31 09:00
s+=2,有强制类型转行,s=s+2,没有强制类型转行,会报错
作者: 陈思伟    时间: 2015-8-31 09:08
s+=2,有自动强转功能,把int类型转为short,所以不报错;后者自动转型为int类型和short类型有冲突,报错
作者: hutudan1993    时间: 2015-8-31 09:11
s=s+2编译报错,是不对的, s+=2 的话会默认进行自动的类型转换
作者: ln0491    时间: 2015-8-31 09:26
s+=2;会自动完成整型转换,s=s+2;右边计算后为整型要强制类型、转换,java中的byte char shot在进行算术运算时,默认为整型




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