黑马程序员技术交流社区

标题: 哪个可以正常编译? [打印本页]

作者: 吉吉粥    时间: 2015-10-22 22:03
标题: 哪个可以正常编译?
程序1
  1. short s1 = 1;
  2. s1 = s1 + 1;
复制代码



程序2
  1. short s1 = 1;
  2. s1 += 1;
复制代码
哪个可以正常编译 为什么?

作者: 疯狂的小豆丁    时间: 2015-10-23 09:25
这时你的面试题???肯定第二个啊,第一个s1+1会自动转成int类型,要把一个int类型赋给short能不挂么?第二种方式相当于s1=(short)(s1+1)这里会自动转换
作者: polarfox17    时间: 2015-10-23 15:15
疯狂的小豆丁 发表于 2015-10-23 09:25
这时你的面试题???肯定第二个啊,第一个s1+1会自动转成int类型,要把一个int类型赋给short能不挂么?第 ...

我想问一下,为啥short s1=1;这一步不是把int赋值给short嘛,为啥不会报错呢
作者: 疯狂的小豆丁    时间: 2015-10-23 17:33
polarfox17 发表于 2015-10-23 15:15
我想问一下,为啥short s1=1;这一步不是把int赋值给short嘛,为啥不会报错呢 ...

short的范围是-32768~32767,这时候将1赋给short是在他范围的,如果超过了他的范围那就必须强制类型转换了
作者: ppaapc    时间: 2015-10-23 20:27
明显第二个啊
作者: 大地z灵    时间: 2015-10-23 20:54
第二个才可以,
第一个必须加强制转换,要不就把s1直接写成1也行。
作者: 雨来    时间: 2015-10-23 21:54
这就是面试题吗?
作者: polarfox17    时间: 2015-10-24 14:09
疯狂的小豆丁 发表于 2015-10-23 17:33
short的范围是-32768~32767,这时候将1赋给short是在他范围的,如果超过了他的范围那就必须强制类型转换 ...

那后面那个s1+1也是在short范围内的啊,为啥就会报错呢
作者: 疯狂的小豆丁    时间: 2015-10-24 14:53
polarfox17 发表于 2015-10-24 14:09
那后面那个s1+1也是在short范围内的啊,为啥就会报错呢

、、、第二个short+int类型自动提升成int了
作者: 土豆丝    时间: 2015-10-24 15:59
建议看看数据类型强制转换
作者: 土豆丝    时间: 2015-10-24 16:00
建议看看数据类型强制转换




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