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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 发哥-阿花 于 2013-11-27 20:51 编辑
  1. byte b = 1; b = b + 1;
  2. byte b = 1; b = b += 1;  
复制代码
上述两种定义,b直接加上1不行,这个懂,下面这种就可以,度娘了好久,愣是没找到。只是说下面这种方式是任意类型都可以。貌似老毕视频中也没讲到。求解救

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 神马都是浮云

查看全部评分

3 个回复

倒序浏览
这个简单,把详细的代码写出来你就懂了。
byte b = (int) 1 ;   这就是你的第一句话,这个是正确的,可以通过编译,当=右边只有一个数据时,赋值符号=会检测右边的数据是否在规定的范围内,如果在,就转换成你定义的类型。
(byte) b = (byte) b + (int) 1 ;   这句话=右边有两个数据,当相加时会自动提升,为(int) b + (int) 1 再赋值给左边就会发生类型转化异常。
(byte) b =(byte) b +=(int) 1 ;  最后这句话,你要清楚它的运行顺序,=符号是从右往左的运算,也就是先运行(byte) b +=(int) 1 ; 注意+=是一个符号,不是两个符号,你去查运算符优先级表的时候就可以知道=和+=在同一级里面。所以这也相当于一个赋值,只不过是先检测两边的和是否在byte范围内,如果在,就转化成byte类型并赋给左边。后面就是(byte) b = (byte) (b+1);了,所以b最终是byte类型

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
枫儿 + 1 + 5 赞一个!

查看全部评分

回复 使用道具 举报
衣带赞 发表于 2013-11-27 20:32
这个简单,把详细的代码写出来你就懂了。
byte b = (int) 1 ;   这就是你的第一句话,这个是正确的,可以通 ...

讲的比老毕详细多了,刚刚去回顾,,,真的有讲,还是N年前面试题,,,谢谢啦
回复 使用道具 举报
byte b = 1; b = b + 1;
byte b = 1; b = b += 1;  

第一句话右边有变量参与,所以会自动类型转换成int型int赋值给byte需要强制类型转换,第一句话没有转换所以错误

第二话虚拟机会自动在底层进行类型转换  如果值不大于左边的类型 就赋值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马