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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© orsoul 中级黑马   /  2015-2-13 01:14  /  1425 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 orsoul 于 2015-2-15 22:23 编辑

废话不多说,先看代码:
  1. short a = 1, b = 2, c = 3;
  2. a = b + c; //报错

  3. a = a + 1; //报错
  4. a += 1; //通过

  5. a = (int)b; //报错
  6. a = (int)3; //通过
复制代码

为何报错,为何通过?我的用的是JDK1.7

7 个回复

倒序浏览
xyf19881010 来自手机 中级黑马 2015-2-13 03:43:17
沙发
第一个,类型自动提升得到了int,然后你赋值给了short,没有强转。下面类似分析
回复 使用道具 举报
书生灬流年 来自手机 中级黑马 2015-2-13 07:05:24
藤椅
补充一下下,+=是一个赋值运算符。
回复 使用道具 举报
没人回答,自己今天才弄明白
  1. short a = 1, b = 2, c = 3;
  2. a = b + c; //报错,因为编译器会把b、c提升为int后再进行运算。这一设定让我觉得很诡异

  3. a = a + 1; //报错
  4. a += 1; //通过。复合赋值运算符隐含了一个强转的动作,将1转换为short型

  5. a = (int)b; //报错
  6. a = (int)3; //通过。对于常量,只要不超出变量的取值范围,编译器会自行转换
复制代码
回复 使用道具 举报
是啊,第一个好诡异啊
回复 使用道具 举报

点评

你的帖子太棒了,为什么没有早一点遇到你。话说我也是受了C的影响。  发表于 2015-2-16 02:20
回复 使用道具 举报
huangchunwei 来自手机 中级黑马 2015-2-15 09:55:22
7#
第一个看着挺奇怪的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马