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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吉吉粥 中级黑马   /  2015-10-22 22:03  /  960 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

程序1
  1. short s1 = 1;
  2. s1 = s1 + 1;
复制代码



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

10 个回复

正序浏览
建议看看数据类型强制转换
回复 使用道具 举报
建议看看数据类型强制转换
回复 使用道具 举报
polarfox17 发表于 2015-10-24 14:09
那后面那个s1+1也是在short范围内的啊,为啥就会报错呢

、、、第二个short+int类型自动提升成int了
回复 使用道具 举报
疯狂的小豆丁 发表于 2015-10-23 17:33
short的范围是-32768~32767,这时候将1赋给short是在他范围的,如果超过了他的范围那就必须强制类型转换 ...

那后面那个s1+1也是在short范围内的啊,为啥就会报错呢
回复 使用道具 举报
雨来 高级黑马 2015-10-23 21:54:03
7#
这就是面试题吗?
回复 使用道具 举报
第二个才可以,
第一个必须加强制转换,要不就把s1直接写成1也行。
回复 使用道具 举报
明显第二个啊
回复 使用道具 举报
polarfox17 发表于 2015-10-23 15:15
我想问一下,为啥short s1=1;这一步不是把int赋值给short嘛,为啥不会报错呢 ...

short的范围是-32768~32767,这时候将1赋给short是在他范围的,如果超过了他的范围那就必须强制类型转换了
回复 使用道具 举报
疯狂的小豆丁 发表于 2015-10-23 09:25
这时你的面试题???肯定第二个啊,第一个s1+1会自动转成int类型,要把一个int类型赋给short能不挂么?第 ...

我想问一下,为啥short s1=1;这一步不是把int赋值给short嘛,为啥不会报错呢
回复 使用道具 举报
这时你的面试题???肯定第二个啊,第一个s1+1会自动转成int类型,要把一个int类型赋给short能不挂么?第二种方式相当于s1=(short)(s1+1)这里会自动转换
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马