黑马程序员技术交流社区

标题: 类型转换的一些疑惑 [打印本页]

作者: orsoul    时间: 2015-2-13 01:14
标题: 类型转换的一些疑惑
本帖最后由 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

作者: xyf19881010    时间: 2015-2-13 03:43
第一个,类型自动提升得到了int,然后你赋值给了short,没有强转。下面类似分析
作者: 书生灬流年    时间: 2015-2-13 07:05
补充一下下,+=是一个赋值运算符。
作者: orsoul    时间: 2015-2-14 21:49
没人回答,自己今天才弄明白
  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; //通过。对于常量,只要不超出变量的取值范围,编译器会自行转换
复制代码

作者: 枪杆不如笔杆    时间: 2015-2-14 22:47
是啊,第一个好诡异啊
作者: fantacyleo    时间: 2015-2-14 23:42
lz可参考我的帖子:http://bbs.itheima.com/thread-127149-1-1.html
作者: huangchunwei    时间: 2015-2-15 09:55
第一个看着挺奇怪的。




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